pandas - 通过重复值连接列

pandas - concat columns by repeats values

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

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" 等)来连接,因为我想在其中使用它的数据框有数千列。想法是自动找到重复的名字并连接它们。

这是使用 pd.concat 和 NumPy 数组的一种方法:

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 将系列列表连接到数据框中。