假设我有两个数据帧df1, df2:
>>> import pandas as pd
>>> data = {'col1':['d', 'c', 'b', 'a', 'a'],'col2':[1,2,3,4,3]}
>>> df1 = pd.DataFrame(data)
>>> df1
col1 col2
0 d 1
1 c 2
2 b 3
3 a 4
4 a 3
>>> df2=pd.DataFrame(data=['a','b','c', 'd'], columns=['col'])
>>> df2
col
0 a
1 b
2 c
3 d
我试图找到最有效的方法来添加三个新列到df2添加值计数,总运行和,总运行和百分比为df2中的每个元素。(a,b,c,d).
这是我到目前为止得到的,但我觉得这个过程应该比我所做的更容易。此外,我不确定如何计算总运行百分比。
>>> a=df1.col1.value_counts(dropna=False)
>>> a
a 2
d 1
c 1
b 1
>>> b=df1.groupby("col1").sum().groupby(level=0).cumsum()
>>> b
col2
col1
a 7
b 3
c 2
d 1
>>> df3=pd.concat([a, b], axis=1)
>>> df3=df3.reset_index()
>>> df3
index col1 col2
0 a 2 7
1 d 1 1
2 c 1 2
3 b 1 3
>>> new_dataset
col index col1 col2
0 a a 2 7
1 b b 1 3
2 c c 1 2
3 d d 1 1
期望输出:
>>> new_dataset
col index col1 col2 col3
0 a a 2 7 0.54
1 b b 1 3 0.23
2 c c 1 2 0.15
3 d d 1 1 0.08
Try withgroupby
:
(df2.merge(df1.groupby('col1', as_index=False)['col2'].agg(['size','sum']),
left_on='col',right_on='col1', how='left'
)
.assign(col3=lambda x: x['sum']/x['sum'].sum())
)
输出:
col size sum col3
0 a 2 7 0.538462
1 b 1 3 0.230769
2 c 1 2 0.153846
3 d 1 1 0.076923