Python 如何根据另一列分别计算列中的数据?

Python 如何根据另一列分别计算列中的数据?,python,pandas,numpy,Python,Pandas,Numpy,我有两个数据帧,如下所示: 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 不多 1 3 2 2 而不是: No Amount 1 5 2 5 不多 1 5 2 5 如何解决此问题?首先筛选df1['a']中包含的值的df2,然后应

我有两个数据帧,如下所示:

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 不多 1 3 2 2 而不是:

No Amount 1 5 2 5 不多 1 5 2 5
如何解决此问题?

首先筛选df1['a']中包含的值的
df2
,然后应用
value\u计数。代码的其余部分只是以所需的格式显示数据

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

您可以简单地找到第二个df的
值\u计数
,以及第一个df的
映射
,即

df1['Amount'] = df1['a'].map(df2['a'].value_counts())
df1 = df1.rename(columns={'a':'No'})
输出:

No Amount 0 1 3 1 2 2 不多 0 1 3 1 2 2
在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