在另一个数据帧中计算一行pandas数据帧

时间:2016-02-26 14:50:28

标签: python pandas

我想在数据框中添加一列,其中包含另一个数据框中的匹配计数。例如,

df1 = pd.DataFrame({'A':['yes','yes','yes','yes','yes','yes','no','no','no','no','no','no'],
                    'B':['L','L','M','M','H','H','L','L','M','M','H','H'],
                    'C':[True,False,True,False,True,False,True,False,True,False,True,False]})

对于df1中的每一行我想知道它在df2中的计数

df2 = pd.DataFrame({'A':['yes','yes','no','yes','no','yes','yes','no','no','no'],
                   'B':['L','M','M','L','M','M','H','L','H','M'],
                   'C':[True,True,True,True,True,False,False,False,False,False]})

添加一个列' count'在df1中,预期输出如下:

index     A     B     C     count
0        yes    L   True        2
1        yes    L   False       0
2        yes    M   True        1
3        yes    M   False       1
4        yes    H   True        0
5        yes    H   False       1
6         no    L   True        0
7         no    L   False       1
8         no    M   True        2
9         no    M   False       1
10        no    H   True        0
11        no    H   False       1

我可以知道这样做的pythonic方法吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

您可merge groupby df2 size fillna。最后,您可以使用https://www.dropbox.com/s/rbmsanfv9pyj2vv/Screenshot%202016-02-26%2015.50.15.png?dl=0列来将NaN替换为0

print df2.groupby(['A','B','C']).size().reset_index(name='count')
     A  B      C  count
0   no  H  False      1
1   no  L  False      1
2   no  M  False      1
3   no  M   True      2
4  yes  H  False      1
5  yes  L   True      2
6  yes  M  False      1
7  yes  M   True      1

print pd.merge(df1, 
               df2.groupby(['A','B','C']).size().reset_index(name='count'),
               on=['A','B','C'],
               how="left").fillna({'count': 0})

      A  B      C  count
0   yes  L   True      2
1   yes  L  False      0
2   yes  M   True      1
3   yes  M  False      1
4   yes  H   True      0
5   yes  H  False      1
6    no  L   True      0
7    no  L  False      1
8    no  M   True      2
9    no  M  False      1
10   no  H   True      0
11   no  H  False      1