Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取频率和运行总数,运行总数百分比(以大熊猫为单位)?_Python_Pandas - Fatal编程技术网

Python 获取频率和运行总数,运行总数百分比(以大熊猫为单位)?

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

假设我有两个数据帧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.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预期的结果添加了