得到频率和运行总金额,运行总金额在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    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

最新更新