Python pandas:在行中旋转 DataFrame 列
Python pandas: pivot DataFrame columns in rows
我有一个 pandas DataFrame 如下,显示了学生在多个科目中的分数:
Name Subject Score
0 Tom A 91
1 Tom B 92
2 Tom C 93
3 Bob A 94
4 Bob C 95
5 Ali B 96
6 Ali C 97
请注意,并非每个学生的所有科目都有分数。我想将它转换成这样的 DataFrame:
Name A B C
0 Tom 91 92 93
1 Bob 94 95
2 Ali 96 97
本次转型要实现的目标:
- 按 'Name'
对分数进行分组
- 插入主题列
- 将分数排列在名字和科目space交叉处
我是 pandas 的新手,但我研究了 DataFrame.pivot_table(),但不幸的是找不到正确的方法。
您使用 pivot_table 来解决这个问题是正确的:
df = df.pivot_table(index='Name', values='Score', columns='Subject') \
.reset_index() \
.rename_axis(None, axis=1)
print(df)
输出:
Name A B C
0 Ali NaN 96.0 97.0
1 Bob 94.0 NaN 95.0
2 Tom 91.0 92.0 93.0
Pivot 也适用于这种情况:
df = df.pivot(index='Name', values='Score', columns='Subject') \
.reset_index() \
.rename_axis(None, axis=1)
这是解决方案
import pandas as pd
df= DATAFRAME [ as yours]
df1=df.pivot(index='Name',columns = 'Subject', values = 'Score').fillna('').round(decimals=0).astype(object)
输出
我有一个 pandas DataFrame 如下,显示了学生在多个科目中的分数:
Name Subject Score
0 Tom A 91
1 Tom B 92
2 Tom C 93
3 Bob A 94
4 Bob C 95
5 Ali B 96
6 Ali C 97
请注意,并非每个学生的所有科目都有分数。我想将它转换成这样的 DataFrame:
Name A B C
0 Tom 91 92 93
1 Bob 94 95
2 Ali 96 97
本次转型要实现的目标:
- 按 'Name' 对分数进行分组
- 插入主题列
- 将分数排列在名字和科目space交叉处
我是 pandas 的新手,但我研究了 DataFrame.pivot_table(),但不幸的是找不到正确的方法。
您使用 pivot_table 来解决这个问题是正确的:
df = df.pivot_table(index='Name', values='Score', columns='Subject') \
.reset_index() \
.rename_axis(None, axis=1)
print(df)
输出:
Name A B C
0 Ali NaN 96.0 97.0
1 Bob 94.0 NaN 95.0
2 Tom 91.0 92.0 93.0
Pivot 也适用于这种情况:
df = df.pivot(index='Name', values='Score', columns='Subject') \
.reset_index() \
.rename_axis(None, axis=1)
这是解决方案
import pandas as pd
df= DATAFRAME [ as yours]
df1=df.pivot(index='Name',columns = 'Subject', values = 'Score').fillna('').round(decimals=0).astype(object)
输出