我有一个大的数据框df,我想在这里执行计算并从中创建新字段
数据
location1 date1 type1 value1 positions location2 type2 date2 value2
sel1 Q1.22 lap1 10 50 sel1 fr1 Q1.22 10
sel1 Q1.22 d1 20 50 NaN NaN NaN NaN
sel1 Q1.22 d2 10 50 NaN NaN NaN NaN
vel1 Q1.22 a1 5 100 NaN NaN NaN NaN
vel1 Q1.22 a2 5 100 NaN NaN NaN NaN
vel1 Q2.22 v1 1 100 NaN NaN NaN NaN
vel1 Q2.22 v1 1 100 NaN NaN NaN NaN
tel1 Q3.22 b1 35 5 tel1 d1 Q3.22 2
tel1 Q3.22 b2 35 5 NaN NaN NaN NaN
gel1 Q4.22 y1 10 80 gel1 z1 Q4.22 2
gel1 Q4.22 y2 15 80 gel1 z1 Q4.22 2
所需的
location date consumed retro finalconsumed re_space positions
sel1 Q1.22 40 10 30 48 50
vel1 Q1.22 10 0 10 98 100
vel1 Q2.22 2 0 2 96 100
tel1 Q3.22 70 2 68 4 5
gel1 Q4.22 25 4 21 80 80
做
我尝试按位置1和日期1分组,然后按合计值1创建“已消费”列,然后按合计值2创建“追溯”列(按位置2和日期2分组)
我还试图创建一个“final”列,然后从新创建的“retro”列中减去新创建的“consumered”
最后,我尝试按位置、位置1和日期1进行分组,并从位置中减去类型1的计数,再加上类型2的计数。这是“re_space”列
对于“sel1”,有3个计数的“type1”和1个计数的“type2”(确保其按位置和日期分组)
对于“vel1”(Q1.22),有2个“type1”计数,0个“type2”计数
对于“vel1”(Q2.22),有2个“type1”计数,“type2”计数为0
步骤3示例
第1节,第1.22节 (100-2)+0=98
在Q1.22中,vel1有100个位置,然后删除2并添加0(因为类型2是NaN)
第1节,第2.22节 (98-2)+0=96
现在我们在vel1中有98个位置,因为我们已经从之前的数据中减去了2。98-2等于96
从98开始,因为这是我们职位的新起始编号
第3步涉及减法和加法
def f(x):
d = {'consumed': [x['value1'].sum()],
'retro': [x['value2'].sum()],
'finalconsumed': [x['value1'].sum() - x['value2'].sum()],
're_space': [x['positions'].mean() - x['type1'].count() + x['type2'].count()]}
return pd.DataFrame(d)
u=df.groupby(['location1', 'date1']).apply(f).reset_index()
一位SO成员最初帮助我完成了这项工作,它工作得非常漂亮。此后,我进行了更新,更新涉及从基本位置减去计数,以便每个季度使用正确的位置计数进行更新。 我想我可能需要引入一个.累计计数脚本
.cumsum())
如有任何建议,我们将不胜感激。我还在研究
在功能上做一个小改动:
相关问题 更多 >
编程相关推荐