我正在使用这样的数据框,但更大且区域更多。我正在尝试按名称对行的 value
求和。 R 或 C 区域的总和进入 total
列,而 M 区域的总和进入 total1
。
输入:
total
, total1
是期望的输出。
ID Zone1 CHC1 Value1 Zone2 CHC2 Value2 Zone3 CHC3 Value3 total total1
1 R5B 100 10 C2 0 20 R10A 2 5 35 0
1 C2 95 20 M2-6 5 6 R5B 7 3 23 6
3 C2 40 4 C4 60 6 0 6 0 10 0
3 C1 100 8 0 0 0 0 100 0 8 0
5 M1-5 10 6 M2-6 86 15 0 0 0 0 21
最佳答案
您可以使用 filter
对于 Zones
和 Values
的数据帧:
z = df.filter(like='Zone')
v = df.filter(like='Value')
然后通过 contains
创建 boolean DataFrame
使用 apply
如果要检查子字符串:
m1 = z.apply(lambda x: x.str.contains('R|C'))
m2 = z.apply(lambda x: x.str.contains('M'))
#for check strings
#m1 = z == 'R2'
#m2 = z.isin(['C1', 'C4'])
最后过滤条件 where
v
和 sum
每行:
df['t'] = v.where(m1.values).sum(axis=1).astype(int)
df['t1'] = v.where(m2.values).sum(axis=1).astype(int)
print (df)
ID Zone1 CHC1 Value1 Zone2 CHC2 Value2 Zone3 CHC3 Value3 t t1
0 1 R5B 100 10 C2 0 20 R10A 2 5 35 0
1 1 C2 95 20 M2-6 5 6 R5B 7 3 23 6
2 3 C2 40 4 C4 60 6 0 6 0 10 0
3 3 C1 100 8 0 0 0 0 100 0 8 0
4 5 M1-5 10 6 M2-6 86 15 0 0 0 0 21
关于python - 按字符串名称 Pandas 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51161506/