添加分组数据帧

时间:2016-09-15 18:02:22

标签: python python-2.7 pandas

我有两个数据帧。如果分组相同,我喜欢添加列中的值。只要两个组值都在每个表中,只需添加一个简单的加法即可。如果不是,则返回nan。我假设是因为您无法添加nanint,但不确定如何解决此问题。

import pandas as pd
df = pd.DataFrame(data=[['A', 4],
                        ['A', 1],
                        ['B', 1],
                        ['B', 5]],
                   columns=['Person', 'Days'])

df1 = pd.DataFrame(data=[['A', 5],
                        ['A', 0],
                        ['C', 3],
                        ['C', 5]],
                   columns=['Person', 'Days'])

df['Days'] = df['Days'] <= 3
df1['Days'] = df1['Days'] <= 3

df = df.groupby('Person').agg(['count'])
df1 = df1.groupby('Person').agg(['count'])

print df + df1

实际输出:

        Days
       count
Person      
A          4
B        NaN
C        NaN

期望的输出:

        Days
       count
Person      
A          4
B          2
C          2

1 个答案:

答案 0 :(得分:2)

<强>更新

In [40]: funcs = ['count','sum']

In [41]: df.groupby('Person').agg(funcs).add(df1.groupby('Person').agg(funcs), fill_value=0)
Out[41]:
        Days
       count sum
Person
A        4.0   2
B        2.0   1
C        2.0   1

旧回答:

In [14]: df.groupby('Person').size().to_frame('count').add(
   ....:  df1.groupby('Person').size().to_frame('count'), fill_value=0)
Out[14]:
        count
Person
A         4.0
B         2.0
C         2.0

PS我使用原始DF - 我没有执行此代码:

df = df.groupby('Person').agg(['count'])
df1 = df1.groupby('Person').agg(['count'])