熊猫条件群计数

时间:2015-12-18 20:58:47

标签: python-3.x pandas

鉴于此数据框:

import pandas as pd
df = pd.DataFrame(
    {'A' : ['foo', 'foo', 'foo', 'foo',
            'bar', 'bar', 'bar', 'bar'],
     'D' : [2, 4, 4, 2, 5, 4, 3, 2]})

DF

    A       D
0   foo     2
1   foo     4
2   foo     4
3   foo     2
4   bar     5
5   bar     4
6   bar     3
7   bar     2

我想得到一个行数,其中A列=' foo'和列D = 2。 然后我想把结果放在一个新的列中:

#First, I filter
df2=df.loc[(df['A']=='foo')&(df['D']==2)]
#Then, I use groupby and lambda x to count
df['Dcount']=df2.groupby(['D'])['D'].transform(lambda x: x.count())
df

我明白了:

    A       D   Dcount
0   foo     2   2
1   foo     4   NaN
2   foo     4   NaN
3   foo     2   2
4   bar     5   NaN
5   bar     4   NaN
6   bar     3   NaN
7   bar     2   NaN

但是,我得到了" SettingWithCopyWarning": 尝试在DataFrame的切片副本上设置值。 尝试使用.loc [row_indexer,col_indexer] = value而不是

我的问题是:这种警告在这种情况下是否重要? 另外,如果pandas从另一个数据帧中获取行,它们如何知道如何正确匹配行?

1 个答案:

答案 0 :(得分:3)

  

这种警告在这种情况下是否重要?

我看到许多事情的警告,并且它从来没有对我产生任何影响。我忽略了它。

  

另外,如果pandas从另一个数据帧中获取行,它们如何知道如何正确匹配行?

pandas正在使用DataFrame的索引。这是您的示例,为了清晰起见,稍作重写:

df2 = df.query('A=="foo" and D==2')
df2['Dcount'] = len(df2)

生成的DataFrame是

     A  D  Dcount
0  foo  2       2
3  foo  2       2

请注意索引中的03?这就是大熊猫用来排队的东西。所以我可以使用上面的

df['Dcount'] = df2['Dcount']

我将得到相同的结果。该分配的右侧是一个系列,因此索引是内置的。

另一方面,我会得到一个错误,我试图分配一个数组:

df['Dcount'] = df2['Dcount'].values  # length error
相关问题