我有以下数据框:
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
我想创建一个新列,该列的累积百分比基于“日期”和“破损”列。所需的数据框应如下所示:
如果我正确理解,则数据框已被分组。 目标是基于“破损”获得“日期”列的总百分比。
我找到的所有解决方案都是基于groupby的,这对我没有帮助。
答案 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