【发布时间】:2021-07-10 17:43:22
【问题描述】:
我有一个大数据框 df,我想在其中执行计算并从中创建新字段。
数据
l_re date_re val_re id_re u_re pos_re l_d date_d val_d id_d u_d
c q321 10 c_q321_1 ok 160 c q321 20 c_q321_1 hi
c q321 20 c_q321_2 cool 160 c q321 10 c_q321_2 hi
b q321 5 b_q321_1 sure 50 NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN c q422 5 c_q422_1 red
NaN NaN NaN NaN NaN NaN c q422 15 c_q422_2 blue
希望
lo date consumed retro final space
c q321 30 30 0 160
b q321 5 0 5 49
正在做
-
我正在尝试按 l_re 和 date_re 分组,然后对 val_re 求和并创建一个“已消费”列,然后对 val_d 求和并创建一个“复古”列(按 l_d 和 date_d 分组)
-
我也在尝试创建一个“final”列,然后从新创建的“retro”列中减去新创建的“consumed”
-
最后我尝试按 pos_re、l_re 和 date_re 分组,并从 pos_re 中减去 id_re 的计数并添加 id_d 的计数.这是“空间”列
对于'c','id_re'有2个计数,'id_d'有2个计数
对于'b','id_re'有1个计数,'id_d'有0个计数
步骤 3 示例
(160 - 2) + 2 = 160
(50 - 1) + 0 = 49
step1 = df.groupby(['l_re','date_re']).agg({'val_re': 'sum'})
step2 = df['final'] = df['consumed'] - df['retro'].astype(int)
step3 = df['space'] = df.groupby(['pos_re', 'l_re', 'date_re']).transform('sum')
df['space'] = (df['pos_re'] - df['id_re'] + df['id_d'])
第 3 步涉及减法和加法
我能够单独执行一些转换,但不确定如何将所有步骤平滑地合并在一起。任何建议表示赞赏
【问题讨论】:
-
IIUC 在第 3 步中,您减去 pos_re 并消耗,然后再次添加它,那么什么是减法...我的意思是那为什么要减去?
-
您添加的这些数字是从哪里来的?
-
@Anurag 160 和 50 来自 'pos_re' 列 C 组有 2 个 'id_re' 计数,b 组有 1 个 'id_d' 计数
-
是的,我知道了,但我要求您添加 2 和 0 的加法部分,所以这些数字来自哪里?
-
2 是 c 被 pos_re', 'l_re', 'date_re' 分组时的计数,另外 2 是 'l_d', 'date_d' 分组时的计数。 b 在对 pos_re'、'l_re'、'date_re' 进行分组时为 1,在对 'l_d'、'date_d' 进行分组时为 0,因为它具有 NaN 记录