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