根据特定条件减去和添加值,考虑基线值

2024-06-02 08:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,我想在其中根据分组id、count和sum进行转换

pod date1   pwr1    pwr2    position
aa  q122    2        2      100
aa  q122    0        4      100
bb  q122    5        0      50
bb  q122    5        0      50
bb  q222    0        0      50
bb  q322    0        5      50
bb  q322    0        5      50

渴望的

pod date    con retro   final   re_space
aa  q122    2   6       -4      101
bb  q122    10  0       10      48
bb  q222    0   0       0       48
bb  q322    0   10     -10      50

def f(x):
    d = {'con': [x['pwr1'].sum()],
         'retro': [x['pwr2'].sum()],
         'final': [x['pwr1'].sum() - x['pwr2'].sum()],
         're_space': [x['pwr2'].count() - x['pwr1'].count()]}  # <<< HERE
    return pd.DataFrame(d)


out = df.groupby(['id', 'date', 'positions']) \
        .apply(f).reset_index().drop(columns='level_3')



# Compute re_space with cumsum

out['re_space'] = out['positions'].astype(float) + out.groupby('id')['re_space'].cumsum()

这可以正常工作,但它仍然在计算值,并从re_空间中进行减法或加法,尽管值为0或null

如有任何建议,我们将不胜感激。 我还在排除故障


Tags: reiddatecountspaceoutaapod
1条回答
网友
1楼 · 发布于 2024-06-02 08:25:00

尝试(x['pwr2'] !=0).values.sum()而不是x['pwr2'].count()

更正代码:

def f(x):
    d = {'con': [x['pwr1'].sum()],
         'retro': [x['pwr2'].sum()],
         'final': [x['pwr1'].sum() - x['pwr2'].sum()],
         're_space': [(x['pwr2'] !=0).values.sum() - (x['pwr1']!=0).values.sum()]}  # <<< HERE
    return pd.DataFrame(d)

产出:

  pod date1  position  con  retro  final  re_space
0  aa  q122       100    2      6     -4     101.0
1  bb  q122        50   10      0     10      48.0
2  bb  q222        50    0      0      0      48.0
3  bb  q322        50    0     10    -10      50.0

相关问题 更多 >