没有分组依据的列上的累计百分比

时间:2020-10-21 20:00:33

标签: python cumsum

我有以下数据框:

import pandas as pd 
data = [['2020-08', 'Peter', 0.5], ['2020-08', 'Tom', 0.29], ['2020-08', 'Kurt', 0], ['2020-09', 'Peter', 0], ['2020-09', 'Tim', 0.79], ['2020-09', 'Kurt', 0]]  
df1 = pd.DataFrame(data, columns = ['Date', 'Name', 'Breakage']) 
df1 

enter image description here

我想创建一个新列,该列的累积百分比基于“日期”和“破损”列。所需的数据框应如下所示:

enter image description here

如果我正确理解,则数据框已被分组。 目标是基于“破损”获得“日期”列的总百分比。

我找到的所有解决方案都是基于groupby的,这对我没有帮助。

2 个答案:

答案 0 :(得分:1)

这似乎可以解决问题

dfs = []
for _, date_df in df1.groupby('Date', as_index=False):
    date_df['CumSumPercetage'] = date_df['Breakage'] / date_df['Breakage'].sum()
    dfs.append(date_df)
df2 = pd.concat(dfs)

虽然它是基于groupby的,但我看不到问题。

答案 1 :(得分:0)

使用此:

df1['CumsumPercentage'] = df1['Breakage'] / df1.groupby('Date')['Breakage'].transform('sum')

输出:

     Date   Name  Breakage  CumsumPercentage
0  2020-08  Peter      0.50          0.632911
1  2020-08    Tom      0.29          0.367089
2  2020-08   Kurt      0.00          0.000000
3  2020-09  Peter      0.00          0.000000
4  2020-09    Tim      0.79          1.000000
5  2020-09   Kurt      0.00          0.000000