gpt4 book ai didi

python - 将多列合并为一列 pandas

转载 作者:行者123 更新时间:2023-12-01 02:08:46 24 4
gpt4 key购买 nike

我有一个 df,它有多个以相同值结尾的列。我想将各列合并为最后一列。例如,任何以“_1”结尾的列都应放入标记为“final_1”的新列中。如果“_1”中的所有值均为“1”,则 Final_1 中的值将为 1;否则,例如,如果“_1”列中至少有一个值不是“1”,则 Final_1 将为 0。

如果我的解释不清晰,原始和最终结果数据框会更清晰。

df = pd.DataFrame({'KEY': ['100000003', '100000009', '100000009', '100000009'], 
'RO_1': [1, 1, 4,1],
'RO_2': [1, 0, 0,0],
'RO_3': [1, 1, 1,1],
'en_1': [1, 4, 1,1],
'en_2': [1, 4, 1,0],
'en_3': [1, 4, 4,0],
'ao_1': [1, 4, 1,1],
'ao_2': [1, 4, 1,0],
'ao_3': [1, 4, 4,0] })

KEY RO_1 RO_2 RO_3 ao_1 ao_2 ao_3 en_1 en_2 en_3
0 100000003 1 1 1 1 1 1 1 1 1
2 100000009 4 0 1 1 1 4 1 1 4
3 100000009 1 0 1 1 0 0 1 0 0

最终结果:

   KEY          RO_1    RO_2    RO_3    ao_1    ao_2    ao_3    en_1    en_2    en_3  Final1  Final2  Final3
0 100000003 1 1 1 1 1 1 1 1 1 1 1 1
2 100000009 4 0 1 1 1 4 1 1 4 0 0 0
3 100000009 1 0 1 1 0 0 1 0 0 1 0 0

我目前的尝试。由于有 3 个不同的列,我正在使用循环。然后我将原始 df 与新框架 (mc) 组合起来。但我没有得到任何不同的东西..

for i in range(1,4):
mc = df.filter(regex='^_' + str(i)).isin([1]).astype(int).rename(columns=lambda x: x.replace('_', 'Final'))
df= pd.concat([df, mc], axis=1)

最佳答案

@DSM 提出了一个更好的拆分列名称的选项:

In [170]: cols = df.columns.drop('KEY')

In [171]: d = (df[cols]
.groupby(cols.str.split('_').str[-1], axis=1)
.all()
.astype(int)
.add_prefix('Final_'))

In [172]: df.join(d)
Out[172]:
KEY RO_1 RO_2 RO_3 ao_1 ao_2 ao_3 en_1 en_2 en_3 Final_1 Final_2 Final_3
0 100000003 1 1 1 1 1 1 1 1 1 1 1 1
1 100000009 1 0 1 4 4 4 4 4 4 1 0 1
2 100000009 4 0 1 1 1 4 1 1 4 1 0 1
3 100000009 1 0 1 1 0 0 1 0 0 1 0 0

或来自 (c) @DSM 和 @piRSquared 的解决方案:

In [194]: df.join(df.drop('KEY', 1)
.eq(1)
.groupby(lambda c: c.rsplit('_', 1)[1], 1)
.all().astype(int).add_prefix('Final'))
Out[194]:
KEY RO_1 RO_2 RO_3 ao_1 ao_2 ao_3 en_1 en_2 en_3 Final1 Final2 Final3
0 100000003 1 1 1 1 1 1 1 1 1 1 1 1
1 100000009 1 0 1 4 4 4 4 4 4 0 0 0
2 100000009 4 0 1 1 1 4 1 1 4 0 0 0
3 100000009 1 0 1 1 0 0 1 0 0 1 0 0

关于python - 将多列合并为一列 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com