相关疑难解决方法(0)

如何制作好的可重复的熊猫示例

花了相当多的时间观察SO上的标签,我得到的印象是pandas问题不太可能包含可重现的数据.这是值得的R社会一直要鼓励不错,并感谢像导游这样,新人能得到放在一起,这些例子一些帮助.能够阅读这些指南并返回可重现数据的人通常会更好地获得他们问题的答案.

我们如何为pandas问题创建良好的可重复示例?简单的数据帧可以放在一起,例如:

import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'], 
                   'income': [40000, 50000, 42000]})
Run Code Online (Sandbox Code Playgroud)

但是许多示例数据集需要更复杂的结构,例如:

  • datetime 指数或数据
  • 多个分类变量(是否等价于R的expand.grid()函数,它会产生某些给定变量的所有可能组合?)
  • MultiIndex或Panel数据

对于dput()难以使用几行代码进行模拟的数据集,是否有与R相当的R ,它允许您生成可复制粘贴的代码以重新生成数据结构?

python pandas

222
推荐指数
5
解决办法
2万
查看次数

Pandas按列中的值百分比

我想在df列中获得特定值的百分比.假设我有一个df(col1,col2,col3,性别)性别列的值为M或F.我想得到df中M和F值的百分比.

我试过这个,它给了我M和F实例的数量,但我希望这些是df中值总数的百分比.

df.groupby('gender').size()
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

python percentage dataframe pandas

23
推荐指数
3
解决办法
2万
查看次数

如何在多列中使用groupby转换

我有一个很大的数据帧,我正在按1到n列分组,并希望在两列(例如foo和bar)上对这些组应用函数.

这是一个示例数据帧:

foo_function = lambda x: np.sum(x.a+x.b)

df = pd.DataFrame({'a':[1,2,3,4,5,6],
                   'b':[1,2,3,4,5,6],
                   'c':['q', 'q', 'q', 'q', 'w', 'w'],  
                   'd':['z','z','z','o','o','o']})

# works with apply, but I want transform:
df.groupby(['c', 'd'])[['a','b']].apply(foo_function)
# transform doesn't work!
df.groupby(['c', 'd'])[['a','b']].transform(foo_function)
TypeError: cannot concatenate a non-NDFrame object
Run Code Online (Sandbox Code Playgroud)

transform显然无法将多个列组合在一起,因为它分别查看每个列(与apply不同).在速度/优雅方面,下一个最佳选择是什么?例如,我可以使用apply,然后df['new_col']通过使用创建pd.match,但这将需要匹配有时多个groupby列(col1和col2),这似乎真的很hacky /将需要相当数量的代码.

- >是否有一个类似groupby().变换的函数可以使用多个列的函数?如果这不存在,最好的黑客是什么?

python pandas

17
推荐指数
1
解决办法
1万
查看次数

如何在pandas中使用groupby根据另一列中的条件计算百分比/比例总数

我正在尝试研究如何使用groupbypandas中的函数来计算每年使用给定的是/否标准的值的比例.

例如,我有一个名为的数据框names:

  Name  Number  Year   Sex Criteria
0  name1     789  1998  Male      N
1  name1     688  1999  Male      N
2  name1     639  2000  Male      N
3  name2     551  1998  Male      Y
4  name2     499  1999  Male      Y
Run Code Online (Sandbox Code Playgroud)

我可以用

namesgrouped = names.groupby(["Sex", "Year", "Criteria"]).sum()
Run Code Online (Sandbox Code Playgroud)

要得到:

                   Number
Sex    Year      Criteria
Male   1998 N        14507
            Y         2308
       1999 N        14119
            Y         2331
Run Code Online (Sandbox Code Playgroud)

等等.我希望"数字标准"列显示每个性别和年份总数的百分比 - 因此,除了1998年以上的N = 14507和Y = 2308,我有N = 86.27%和Y = 13.73%.

任何人都可以建议如何做到这一点?

python pivot group-by dataframe pandas

8
推荐指数
1
解决办法
2万
查看次数

如何在熊猫中划分两个groupby对象?

我有以下代码:

import numpy as np
import pandas as pd
obs = pd.DataFrame({
        'storm': [1, 1, 1, 1, 0, 0, 0, 0], 
        'lightning': [1, 1, 0, 0, 1, 1, 0, 0], 
        'thunder': [1, 0, 1, 0, 1, 0, 1, 0],
        'p': [0.20, 0.05, 0.04, 0.36, 0.04, 0.01, 0.03, 0.27]
    })
g1=obs.groupby(['lightning','thunder']).agg({'p':'sum'})
g2=obs.groupby(['lightning','thunder','storm']).agg({'p':'sum'})
Run Code Online (Sandbox Code Playgroud)

这使

在此处输入图片说明

现在如何将更详细的分组依据除以较不详细的分组(以计算百分比)?

我已经用groupby读取了熊猫总数的百分比,但是无法得出如何重写我的案例的信息。

python group-by pandas

4
推荐指数
1
解决办法
2350
查看次数

通过一列,对熊猫中分组记录的另一列进行自定义操作

我想通过将另一列上的值分组来对一列应用自定义操作。按列分组以获取计数,然后将所有分组记录的另一个列值除以该计数。

我的数据框:

   emp opp amount
0  a   1   10
1  b   1   10
2  c   2   30
3  b   2   30
4  d   2   30
Run Code Online (Sandbox Code Playgroud)

我的情况:

  • 对于opp = 1,工作了两个emp(a,b)。因此,应将金额分成10/2 = 5
  • 对于opp = 2,工作了两个emp(b,c,d)。因此金额应为30/3 = 10

最终输出数据帧:

      emp opp amount
    0  a   1   5
    1  b   1   5
    2  c   2   10
    3  b   2   10
    4  d   2   10
Run Code Online (Sandbox Code Playgroud)

最好的办法是什么

python apply pandas

3
推荐指数
1
解决办法
849
查看次数

如何在Python中的groupby中计算计数和百分比

分组后我有以下输出

Publisher.groupby('Category')['Title'].count()
Category
Coding          5
Hacking         7
Java            1
JavaScript      5
LEGO           43
Linux           7
Networking      5
Others        123
Python          8
R               2
Ruby            4
Scripting       4 
Statistics      2
Web             3
Run Code Online (Sandbox Code Playgroud)

在上面的输出中,我还希望该百分比,即第一行的百分比5*100/219,依此类推。我正在关注

 Publisher.groupby('Category')['Title'].agg({'Count':'count','Percentage':lambda x:x/x.sum()})
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误。请帮忙

python group-by pandas

3
推荐指数
1
解决办法
7756
查看次数

澄清熊猫 groupby 中的 lambda 运算符

我无法发表评论,因为我是 stackoverflow 的新手,所以不能直接在线程中提问,但我想澄清这个问题中的解决方案:

# From Paul H
import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
                   'office_id': list(range(1, 7)) * 2,
                   'sales': [np.random.randint(100000, 999999)
                             for _ in range(12)]})
state_office = df.groupby(['state', 'office_id']).agg({'sales': 'sum'})
# Change: groupby state_office and divide by sum
state_pcts = state_office.groupby(level=0).apply(lambda x:
                                                 100 * x / float(x.sum()))
Run Code Online (Sandbox Code Playgroud)

我了解多索引选择(级别 0 与级别 1),但我不清楚xlambda 函数中的每个索引是指什么。将xx.sum()会向我提及level = 0(总结中的每个分组在所有的结果level = 0),但 …

python lambda pandas

3
推荐指数
1
解决办法
1290
查看次数

在 pd DataFrame 中为每个组创建相对值

考虑这个带有许多列的 DataFrame,但它在 列 中定义了一个功能'feature',并在 列 中定义了一些值'values'

我想要在额外的列中显示每个特征(组)的相对值所需的结果是由我在列中手动预先计算的'desired'

df = pd.DataFrame(
    data={
        'feature': [1, 1, 2, 3, 3, 3],
        'values': [30.0, 20.0, 25.0, 100.0, 250.0, 50.0],
        'desired': [0.6, 0.4, 1.0, 0.25, 0.625, 0.125],
        'more_columns': range(6),
    },
)
Run Code Online (Sandbox Code Playgroud)

这导致了 DataFrame

   feature  values  desired  more_columns
0        1    30.0    0.600             0
1        1    20.0    0.400             1
2        2    25.0    1.000             2
3        3   100.0    0.250             3
4        3   250.0    0.625             4
5        3    50.0    0.125             5
Run Code Online (Sandbox Code Playgroud)

因此,对于由特征定义的组,1所需的值为 …

python pandas pandas-groupby

2
推荐指数
1
解决办法
1548
查看次数

Python Pandas:按一列分组,只在另一列聚合,但取相应的数据

我已经看到了许多其他相关的 SO 问题,例如thisthis,但它们似乎并不是我想要的。假设我有一个这样的数据框:

import pandas as pd
df = pd.DataFrame(columns=['patient', 'parent csn', 'child csn', 'days'])
df.loc[0] = [0, 0, 10, 5]
df.loc[1] = [0, 0, 11, 3]
df.loc[2] = [0, 1, 12, 6]
df.loc[3] = [0, 1, 13, 4]
df.loc[4] = [1, 2, 20, 4]
df
Out[9]: 
  patient parent csn child csn days
0       0          0        10    5
1       0          0        11    3
2       0          1        12    6
3       0          1        13    4
4       1          2 …
Run Code Online (Sandbox Code Playgroud)

aggregate python-3.x pandas pandas-groupby

2
推荐指数
1
解决办法
153
查看次数