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
将系列列表连接到数据框中。
我正在尝试连接我的数据框中的列,如果它们在字段中具有相同的值。我会解释我自己。假设我有这个数据框:
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
将系列列表连接到数据框中。