Python 获取频率和运行总数,运行总数百分比(以大熊猫为单位)?
假设我有两个数据帧df1,df2:Python 获取频率和运行总数,运行总数百分比(以大熊猫为单位)?,python,pandas,Python,Pandas,假设我有两个数据帧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
>>> 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.col中每个元素的值计数、总运行总和、总运行总和百分比,即(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
尝试使用
groupby
:
(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
您在
df2
中有d
吗?@QuangHoang是的,谢谢您指出。刚刚又编辑了这篇文章。还有,在这里,预期的结果是什么?@QuangHoang预期的结果添加了