提问者:小点点

基于列名是否以字符串结尾并以另一列中的值开头,求dataframe特定列的总和


我有一个像这样的熊猫数据框

In [1]: import pandas as pd
In [2}: df = pd.DataFrame([['X', 2, 3, 4, 5 ,6, 7], ['Y',8, 9, 10, 11, 12, 13], ['X', 14, 15, 16, 17, 18, 19]], \
 columns=['name', 'X 1_V1', 'X 1_V2', 'Y 1_V1', 'Y 1_V2','X 2_V1', 'X 2_V2'])
In[3]: print(df)

Out[3]: name  X 1_V1  X 1_V2  Y 1_V1  Y 1_V2  X 2_V1  X 2_V2
    0    X       2       3       4       5       6       7
    1    Y       8       9      10      11      12      13
    2    X      14      15      16      17      18      19

我想对以name列中的值开始并以V1结束的列求和。所以第一行和第三行是第二列和第五列的总和,而第二行是第四列的总和。

In[3]: df['sum']
Out[3]: 
0     8
1    10
2    32
Name: sum, dtype: int64

我试过了

df["sum_Area"] = df[[x for x in df.columns if (x.split(' ')[0] == df['name']) and (x.endswith('peak_area'))]].sum(axis = "columns")

但是收到错误:ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()列名是字符串

结果我想在图片格式


共1个答案

匿名用户

df['sum']=df.apply(lambda x:sum([x[c] for c in df.columns if c.split()[0]==x['name'] and c.endswith('V1')]),axis=1)