【发布时间】:2021-10-12 10:21:36
【问题描述】:
【问题讨论】:
标签: python-3.x pandas dataframe python-requests
【问题讨论】:
标签: python-3.x pandas dataframe python-requests
您可以使用groupby.transform 和bfill() 的组合,并使用assign 分配回新列:
df = df.assign(late_payments=df[df['Payment'].eq('Delay')].groupby('Vendor')['Amount'].transform('sum')).bfill()
打印:
Vendor Payment Amount late_payments
0 A Ontime 91 78.0
1 A Ontime 90 78.0
2 A Delay 78 78.0
3 B Ontime 58 166.0
4 B Delay 77 166.0
5 B Ontime 96 166.0
6 B Delay 89 166.0
【讨论】:
让我们定义数据框:
data = pd.DataFrame({'Vendor':['A', 'A', 'B', 'B'],
'Payment':['Ontime', 'Delay', 'Ontime', 'Delay'],
'Paid Late by Vendor':[20, 21, 19, 18]})
要获得您想要的结果,您需要使用分组值创建一个单独的数据框,然后将其与原始数据框组合。
由于您只需要延迟付款的值,因此您需要过滤要分组的数据以仅包含所需的记录,然后对其进行分组。
reset_index() 用于使索引成为列(在这种情况下,它是我们分组的列;供应商)
groupedLateData = data[data['Payment']=='Delay'].groupby('Vendor')["Paid Late by Vendor"].sum().reset_index()
然后我们将生成的数据框与 Vendor 列上的原始数据框合并
pd.merge(data, groupedLateData, on='Vendor')
【讨论】: