使用Panda对每行的特定列数求和



我有美元化的数据帧:

name  code     1   2  3  4  5  6  7 .........155    days
0  Lari  EH214    0   5  2  1  0  0  0           0      3
1  Suzi  FK362    0   0  0  0  2  3  0           0      108
2  Jil   LM121    0   0  4  2  1  0  0           0      5
...

我想将第1列到第2列之间的列与"0"上出现的数字相加;天",例如,
对于第1行,我将合计3天->0+5+2
第2行为108天,第3行为
5天->0+4+2+1+0

我怎么能做这样的事?寻找方法。

对于矢量化解决方案,首先按位置过滤行,然后通过比较numpy Boradasting中的days获得掩码,如果不匹配,则替换DataFrame.where中的0和最后一个sum:

df1 = df.iloc[:, 2:-1]
m = df1.columns.astype(int).to_numpy() <= df['days'].to_numpy()[:, None]
df['sum'] = df1.where(m, 0).sum(axis=1)
print (df)
name   code  1  2  3  4  5  6  7  155  days  sum
0  Lari  EH214  0  5  2  1  0  0  0    0     3    7
1  Suzi  FK362  0  0  0  0  2  3  0    0   108    5
2   Jil  LM121  0  0  4  2  1  0  0    0     5    7

IIUC,使用:

df['sum'] = df.apply(lambda r: r.loc[1: r['days']].sum(), axis=1)

或者,如果列名是字符串:

df['sum'] = df.apply(lambda r: r.loc['1': str(r['days'])].sum(), axis=1)

输出:

name   code  1  2  3  4  5  6  7  155  days  sum
0  Lari  EH214  0  5  2  1  0  0  0    0     3    7
1  Suzi  FK362  0  0  0  0  2  3  0    0   108    5
2   Jil  LM121  0  0  4  2  1  0  0    0     5    7

最新更新