我有两个这样的数据框:
df1 = pd.DataFrame({'a':[1,2]})
df2 = pd.DataFrame({'a':[1,1,1,2,2,3,4,5,6,7,8]})
我想在df2中分别计算两个df1的数字,正确答案如下:
No Amount 1 3 2 2
而不是:
No Amount 1 5 2 5
我该如何解决这个问题?
答案 0 :(得分:1)
首先过滤df2
以获取df1 ['a']中包含的值,然后应用value_counts
。其余代码只是以您想要的格式显示数据。
result = (
df2[df2['a'].isin(df1['a'].unique())]['a']
.value_counts()
.reset_index()
)
result.columns = ['No', 'Amount']
>>> result
No Amount
0 1 3
1 2 2
答案 1 :(得分:1)
你可以简单地找到第二个df的value_counts
和map
的第一个df,即
df1['Amount'] = df1['a'].map(df2['a'].value_counts())
df1 = df1.rename(columns={'a':'No'})
输出:
No Amount 0 1 3 1 2 2
答案 2 :(得分:1)
在pandas 0.21.0中,您可以使用set_axis将列重命名为链式方法。这是一个单行解决方案:
df2[df2.a.isin(df1.a)]\
.squeeze()\
.value_counts()\
.reset_index()\
.set_axis(['No','Amount'], axis=1, inplace=False)
输出:
No Amount
0 1 3
1 2 2