【发布时间】:2021-11-06 07:41:42
【问题描述】:
我有一个数据框,我想按列值分组,然后进行计算以创建一个新列。以下是设置数据:
import pandas as pd
df = pd.DataFrame({
'Red' : [1,2,3,4,5,6,7,8,9,10],
'Groups':['A','B','A','A','B','C','B','C','B','C'],
'Blue':[10,20,30,40,50,60,70,80,90,100]
})
df.groupby('Groups').apply(print)
我想做的是在原始数据框中创建一个“TOTAL”列。如果它是组 'TOTAL' 的第一条记录,则得到零,否则 TOTAL 将在索引处得到 ['Blue'] 减去索引处的 ['Red']。
我尝试在下面的函数中执行此操作,但它不起作用。
def funct(group):
count = 0
lst = []
for info in group:
if count == 0:
lst.append(0)
count += 1
else:
num = group.iloc[count]['Blue'] - group.iloc[count-1]['Red']
lst.append(num)
count += 1
group['Total'] = lst
return group
df = df.join(df.groupby('Groups').apply(funct))
代码适用于第一组,但随后出错。
期望的结果是:
df_final = pd.DataFrame({
'Red' : [1,2,3,4,5,6,7,8,9,10],
'Groups':['A','B','A','A','B','C','B','C','B','C'],
'Blue':[10,20,30,40,50,60,70,80,90,100],
'Total':[0,0,29,37,48,0,65,74,83,92]
})
df_final
df_final.groupby('Groups').apply(print)
感谢您的帮助!
【问题讨论】:
标签: pandas dataframe iteration pandas-groupby vectorization