我想在一个数据框中添加一列,其中包含另一个数据框中的匹配数。例如,
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]})
Run Code Online (Sandbox Code Playgroud)
对于 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]})
Run Code Online (Sandbox Code Playgroud)
通过在 df1 中添加“count”列,预期输出如下:
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
Run Code Online (Sandbox Code Playgroud)
我可以知道执行此操作的 pythonic 方法吗?先感谢您。
您可以尝试使用mergeof with 。最后您可以使用with 列 来替换为:groupbydf2sizefillnaNaN0
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
Run Code Online (Sandbox Code Playgroud)