首页 > 解决方案 > pandas - 通过重复值连接列

问题描述

如果它们在字段中具有相同的值,我正在尝试连接我的数据框的列。我会自己解释。假设我有这个数据框:

peter   brian   peter   mike   brian   
  2       3       4       5      6
  4       6       1       7      5

然后我想考虑第一行中重复的值来连接列:

peter   brian   mike
  2       3       5
  4       6       7
  4       6
  1       5

重要的是要澄清我不能通过直接调用名称(“peter”、“mike”等)来连接,因为我要使用它的数据框有数千列。这个想法是自动找到重复的名称并将它们连接起来。

标签: pythonpandasdataframeconcatpandas-groupby

解决方案


这是使用pd.concatNumPy 数组的一种方法:

res = pd.concat([pd.Series(df[col].values.flatten(), name=col) \
                 for col in df.columns.unique()], axis=1)

print(res)

   peter  brian  mike
0      2      3   5.0
1      4      6   7.0
2      4      6   NaN
3      1      5   NaN

注意mike是强制的,float因为它包含NaN值。

解释

  • df.columns.unique提取唯一的列名。
  • df[col].values.flatten从所有系列中提取特定名称的值作为 NumPy 数组,然后将它们展平为一维数组。
  • pd.Series将数组转换为系列对象。
  • 我们通过列表推导遍历所有这些唯一的列名。
  • pd.concat将系列列表连接到数据框中。

推荐阅读