系统的方式pandas dataframe的夏姆列

问题描述 投票:0回答:1
我有一个像这样的熊猫数据框架:

1_2 1_3 1_4 2_3 2_4 3_4 1 5 2 8 2 2 4 3 4 5 8 5 8 8 8 9 3 3 4 3 4 4 8 3 8 0 7 4 2 2
列是1,2,3,4的4C2组合。我想生成4个新列

f_1, f_2, f_3, f_4

,其中列的值定义为be

df['f_1'] = df['1_2']+df['1_3']+df['1_4'] df['f_2'] = df['1_2']+df['2_3']+df['2_4'] df['f_3'] = df['1_3']+df['2_3']+df['3_4'] df['f_4'] = df['1_4']+df['2_4']+df['3_4']
其他单词,列定义为列的总和。

因此,在这种情况下,我可以强迫自己的方式。但是,我的原始数据框架要大得多,而有

f_i
列,因此蛮力的方法是行不通的。
因此,期望的结果看起来像
i_j

谢谢你。

构建列的词典并以循环处理:

k_i

您也可以使用
20C2 = 190
而不是循环:

1_2 1_3 1_4 2_3 2_4 3_4 f_1 f_2 f_3 f_4 1 5 2 8 2 2 8 11 15 6 4 3 4 5 8 5 11 17 13 17 8 8 8 9 3 3 24 20 20 14 4 3 4 4 8 3 11 16 10 15 8 0 7 4 2 2 15 14 6 11
python pandas dataframe combinations
1个回答
1
投票
输出:

s = df.columns.to_series().str.split('_').explode() d = s.index.groupby(s) for k, v in d.items(): df[f'f_{k}'] = df[v].sum(axis=1)
中间体

eval

query = '\n'.join(f'f_{k} = {"+".join(map("`{}`".format, v))}' for k,v in d.items()) out = df.eval(query)
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.