2016-02-26 115 views
2

我想用另一個數據幀中的匹配計數向數據幀添加一列。例如,在另一個數據幀中計數一行熊貓數據幀

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]}) 

通過添加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方法嗎?先謝謝你。

+0

這是什麼指望? –

回答

3

您可以嘗試mergegroupbydf2size。最後你可以使用fillna與柱更換NaN0

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 
+0

很整潔:-) –

+0

非常感謝Jezrael。這是完美的工作。 –

+0

我改進了答案,因爲'fillna(0)'替換了所有'df'中的'NaN',並且必須在'count'列中替換'NaN' – jezrael