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

时间:2017-11-22 01:42:53

标签: 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

而不是:

No   Amount
1    5
2    5

我该如何解决这个问题?

3 个答案:

答案 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_countsmap的第一个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