Pandas:如何将行转为列
Pandas: How to pivot rows into columns
我正在寻找一种将大约 600 列转换为行的方法。这是一个只有 4 个列的示例(好、坏、好、糟糕):
df:
RecordID good bad ok Horrible
A 0 0 1 0
B 1 0 0 1
期望的输出:
RecordID Column Value
A Good 0
A Bad 0
A Ok 1
A Horrible 0
B Good 1
B Bad 0
B Ok 0
B Horrible 1
你可以使用 .stack()
as follows. Using .stack()
是首选,因为它自然会导致行已经按照 RecordID
的顺序排序,这样 你就不需要浪费处理时间排序 再说一遍,当你有大量的列时尤其重要。
df = df.set_index('RecordID').stack().reset_index().rename(columns={'level_1': 'Column', 0: 'Value'})
输出:
RecordID Column Value
0 A good 0
1 A bad 0
2 A ok 1
3 A Horrible 0
4 B good 1
5 B bad 0
6 B ok 0
7 B Horrible 1
可以使用熔化函数:
(df.melt(id_vars='RecordID', var_name='Column', value_name='Value')
.sort_values('RecordID')
.reset_index(drop=True)
)
输出:
RecordID Column Value
0 A good 0
1 A bad 0
2 A ok 1
3 A Horrible 0
4 B good 1
5 B bad 0
6 B ok 0
7 B Horrible 1
添加数据框:
import pandas as pd
import numpy as np
data2 = {'RecordID': ['a', 'b', 'c'],
'good': [0, 1, 1],
'bad': [0, 0, 1],
'horrible': [0, 1, 1],
'ok': [1, 0, 0]}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data2)
熔体数据:
https://pandas.pydata.org/docs/reference/api/pandas.melt.html
melted = df.melt(id_vars='RecordID', var_name='Column', value_name='Value')
melted
可选:分组依据 - 总和或平均值:
f2 = melted.groupby(['Column']).sum()
df2
我正在寻找一种将大约 600 列转换为行的方法。这是一个只有 4 个列的示例(好、坏、好、糟糕):
df:
RecordID good bad ok Horrible
A 0 0 1 0
B 1 0 0 1
期望的输出:
RecordID Column Value
A Good 0
A Bad 0
A Ok 1
A Horrible 0
B Good 1
B Bad 0
B Ok 0
B Horrible 1
你可以使用 .stack()
as follows. Using .stack()
是首选,因为它自然会导致行已经按照 RecordID
的顺序排序,这样 你就不需要浪费处理时间排序 再说一遍,当你有大量的列时尤其重要。
df = df.set_index('RecordID').stack().reset_index().rename(columns={'level_1': 'Column', 0: 'Value'})
输出:
RecordID Column Value
0 A good 0
1 A bad 0
2 A ok 1
3 A Horrible 0
4 B good 1
5 B bad 0
6 B ok 0
7 B Horrible 1
可以使用熔化函数:
(df.melt(id_vars='RecordID', var_name='Column', value_name='Value')
.sort_values('RecordID')
.reset_index(drop=True)
)
输出:
RecordID Column Value
0 A good 0
1 A bad 0
2 A ok 1
3 A Horrible 0
4 B good 1
5 B bad 0
6 B ok 0
7 B Horrible 1
添加数据框:
import pandas as pd
import numpy as np
data2 = {'RecordID': ['a', 'b', 'c'],
'good': [0, 1, 1],
'bad': [0, 0, 1],
'horrible': [0, 1, 1],
'ok': [1, 0, 0]}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data2)
熔体数据: https://pandas.pydata.org/docs/reference/api/pandas.melt.html
melted = df.melt(id_vars='RecordID', var_name='Column', value_name='Value')
melted
可选:分组依据 - 总和或平均值:
f2 = melted.groupby(['Column']).sum()
df2