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']。我在想,如果这可以在一个循环中完成,怎么可能?是的,你可以使用列表理解来完成-参见上面编辑的答案。是的。成功了。非常感谢。