Python 3.x 合并数据帧中的两列或多列
我有一个数据框,如下所示:Python 3.x 合并数据帧中的两列或多列,python-3.x,pandas,Python 3.x,Pandas,我有一个数据框,如下所示: col_1 col_2 col_3 col_4 col_5 col_6 234. 61. 71. age=23 sal=45k. bonus_sal=61 462. 371. 73. age=64 sal=70k. bonus_sal=66 我想组合第4列、第5列和第6列,这样我的数据帧就会变成: col_1 col_2 col_3
col_1 col_2 col_3 col_4 col_5 col_6
234. 61. 71. age=23 sal=45k. bonus_sal=61
462. 371. 73. age=64 sal=70k. bonus_sal=66
我想组合第4列、第5列和第6列,这样我的数据帧就会变成:
col_1 col_2 col_3 col_4
234. 61. 71. age=23;sal=45k;bonus_sal=61
462. 371. 73. age=64;sal=70k;bonus_sal=66
我如何使用熊猫来实现这一点?此外,这只是一个示例数据帧。真正的数据帧有最后二十列这样组合。我如何才能做到这一点?您只需执行以下操作:
df['merged_columns'] = df['col_4'].astype(str) + ";" + df['col_5'].astype(str) + ";" + df['col_6'].astype(str) + ";"
这将使他们走到一起
如果在数据帧中有许多列希望加入
,并且在它们的名称中具有特定的特征,例如列
(如上面的示例所示),则可以使用列表理解:
cols = [col for col in df.columns if 'col_' in col]
df['columns_combined'] = df[cols].apply(lambda row: ';'.join(row.values.astype(str)), axis=1)
您可以简单地执行以下操作:
df['merged_columns'] = df['col_4'].astype(str) + ";" + df['col_5'].astype(str) + ";" + df['col_6'].astype(str) + ";"
这将使他们走到一起
如果在数据帧中有许多列希望加入
,并且在它们的名称中具有特定的特征,例如列
(如上面的示例所示),则可以使用列表理解:
cols = [col for col in df.columns if 'col_' in col]
df['columns_combined'] = df[cols].apply(lambda row: ';'.join(row.values.astype(str)), axis=1)
让我们试试
pop
df['col_4'] = df.pop('col_4')+';'+df.pop('col_5')+';'+df.pop('col_6')
df
Out[390]:
col_1 col_2 col_3 col_4
0 234.0 61.0 71.0 age=23;sal=45k.;bonus_sal=61
1 462.0 371.0 73.0 age=64;sal=70k.;bonus_sal=66
让我们试试
pop
df['col_4'] = df.pop('col_4')+';'+df.pop('col_5')+';'+df.pop('col_6')
df
Out[390]:
col_1 col_2 col_3 col_4
0 234.0 61.0 71.0 age=23;sal=45k.;bonus_sal=61
1 462.0 371.0 73.0 age=64;sal=70k.;bonus_sal=66
由于实际数据帧包含许多列,您可以尝试以下操作:
y=3
df[f'col_{y+1}'] = df[df.columns[y:]].apply(lambda x:";".join(x.astype(str)),axis=1)
其中y是要与以下列合并的第一列(索引从0开始)
然后,如果需要,可以这样删除合并列:
df.drop(df.columns[y:-1], axis=1, inplace=True)
由于实际数据帧包含许多列,您可以尝试以下操作:
y=3
df[f'col_{y+1}'] = df[df.columns[y:]].apply(lambda x:";".join(x.astype(str)),axis=1)
其中y是要与以下列合并的第一列(索引从0开始)
然后,如果需要,可以这样删除合并列:
df.drop(df.columns[y:-1], axis=1, inplace=True)
谢谢你的回复。是的,我做到了。但是就像我说的,我有二十列,所以我必须写二十次df['col']。我在想,如果这可以在一个循环中完成,怎么可能?是的,你可以使用列表理解来完成-参见上面编辑的答案。是的。成功了。谢谢你的回复。是的,我做到了。但是就像我说的,我有二十列,所以我必须写二十次df['col']。我在想,如果这可以在一个循环中完成,怎么可能?是的,你可以使用列表理解来完成-参见上面编辑的答案。是的。成功了。非常感谢。