Python Pandas 旋转:如何在第一列中分组并为第二列中的每个唯一值创建一个新列
Python Pandas pivoting: how to group in the first column and create a new column for each unique value from the second column
我在 Python 中使用 pandas,我正在尝试转换数据框。我有一个这样的数据框:
第 1 列
第 2 列
1
22
1
23
2
34
2
35
2
36
3
49
我想对第一列中的值进行分组,同时在不同的列中为属于第一列中分组值的值创建一个新的 column/attribute。我不知道第 2 列中属于第 1 列中唯一值的最大数量的值是多少。
第 1 列
列2_1
列2_2
列2_3
1
22
23
None/NaN
2
34
35
36
3
49
None/NaN
None/NaN
我一直在寻找如何有效地做到这一点,但我可能缺乏找到好的结果的词汇。感谢任何帮助。
尝试:
df = (
df.assign(
temp=df.groupby('Column 1').cumcount() + 1
)
.pivot_table(
index='Column 1',
columns='temp',
values='Column 2')
.add_prefix('Column 2_')
.rename_axis(columns=None)
.reset_index()
)
根据@Henry 的建议,您可以直接将 Series 传递给 pivot_table
:
df = (
df.pivot_table(
index='Column 1',
columns=df.groupby('Column 1').cumcount() + 1,
values='Column 2')
.add_prefix('Column 2_')
.reset_index()
)
输出:
Column1 Column2_1 Column2_2 Column2_3
0 1 22.0 23.0 NaN
1 2 34.0 35.0 36.0
2 3 49.0 NaN NaN
我在 Python 中使用 pandas,我正在尝试转换数据框。我有一个这样的数据框:
第 1 列 | 第 2 列 |
---|---|
1 | 22 |
1 | 23 |
2 | 34 |
2 | 35 |
2 | 36 |
3 | 49 |
我想对第一列中的值进行分组,同时在不同的列中为属于第一列中分组值的值创建一个新的 column/attribute。我不知道第 2 列中属于第 1 列中唯一值的最大数量的值是多少。
第 1 列 | 列2_1 | 列2_2 | 列2_3 |
---|---|---|---|
1 | 22 | 23 | None/NaN |
2 | 34 | 35 | 36 |
3 | 49 | None/NaN | None/NaN |
我一直在寻找如何有效地做到这一点,但我可能缺乏找到好的结果的词汇。感谢任何帮助。
尝试:
df = (
df.assign(
temp=df.groupby('Column 1').cumcount() + 1
)
.pivot_table(
index='Column 1',
columns='temp',
values='Column 2')
.add_prefix('Column 2_')
.rename_axis(columns=None)
.reset_index()
)
根据@Henry 的建议,您可以直接将 Series 传递给 pivot_table
:
df = (
df.pivot_table(
index='Column 1',
columns=df.groupby('Column 1').cumcount() + 1,
values='Column 2')
.add_prefix('Column 2_')
.reset_index()
)
输出:
Column1 Column2_1 Column2_2 Column2_3
0 1 22.0 23.0 NaN
1 2 34.0 35.0 36.0
2 3 49.0 NaN NaN