Pandas Dataframe 转换为 pivot table
Pandas Dataframe converting to pivot table
我有一个如下所示的数据框。我想将它转换为 pivot table 格式,其中每一行都有唯一 ID,每个 Score 都有新列,带有 Type 前缀。
我在实际数据框中有大约 15 种不同的类型。
df = pd.DataFrame({'ID' : [1,1,2,2,3,3,4,4],
'Type':['A','B','A','B','A','B','A','B'],
'Score':[0.3,np.nan, 0.2, 0.1, 1.1,np.nan, 2, np.nan]})
期望的输出
ID
A_Score
B_Score
1
0.3
2
0.2
0.1
3
1.1
4
2
我在下面尝试过,它几乎可以满足我的需要,但我需要重命名列并在 pandas 数据帧中需要它
df2 = df.pivot_table(index=['ID'], columns='Type')
你可以做到
out = df.pivot_table(index='ID', columns='Type',values='Score').add_prefix('Score_').reset_index()
Out[355]:
Type ID Score_A Score_B
0 1 0.3 NaN
1 2 0.2 0.1
2 3 1.1 NaN
3 4 2.0 NaN
另一个版本:
df = df.set_index(["ID", "Type"]).unstack(1)
df.columns = [f"{b}_{a}" for a, b in df.columns]
print(df.reset_index().fillna(""))
打印:
ID A_Score B_Score
0 1 0.3
1 2 0.2 0.1
2 3 1.1
3 4 2.0
您可以使用 map-join
展平您的 multiIndex header
df2.columns = df2.columns.map('_'.join)
print(df2)
输出:
Score_A Score_B
ID
1 0.3 NaN
2 0.2 0.1
3 1.1 NaN
4 2.0 NaN
我有一个如下所示的数据框。我想将它转换为 pivot table 格式,其中每一行都有唯一 ID,每个 Score 都有新列,带有 Type 前缀。
我在实际数据框中有大约 15 种不同的类型。
df = pd.DataFrame({'ID' : [1,1,2,2,3,3,4,4],
'Type':['A','B','A','B','A','B','A','B'],
'Score':[0.3,np.nan, 0.2, 0.1, 1.1,np.nan, 2, np.nan]})
期望的输出
ID | A_Score | B_Score |
---|---|---|
1 | 0.3 | |
2 | 0.2 | 0.1 |
3 | 1.1 | |
4 | 2 |
我在下面尝试过,它几乎可以满足我的需要,但我需要重命名列并在 pandas 数据帧中需要它
df2 = df.pivot_table(index=['ID'], columns='Type')
你可以做到
out = df.pivot_table(index='ID', columns='Type',values='Score').add_prefix('Score_').reset_index()
Out[355]:
Type ID Score_A Score_B
0 1 0.3 NaN
1 2 0.2 0.1
2 3 1.1 NaN
3 4 2.0 NaN
另一个版本:
df = df.set_index(["ID", "Type"]).unstack(1)
df.columns = [f"{b}_{a}" for a, b in df.columns]
print(df.reset_index().fillna(""))
打印:
ID A_Score B_Score
0 1 0.3
1 2 0.2 0.1
2 3 1.1
3 4 2.0
您可以使用 map-join
展平您的 multiIndex headerdf2.columns = df2.columns.map('_'.join)
print(df2)
输出:
Score_A Score_B
ID
1 0.3 NaN
2 0.2 0.1
3 1.1 NaN
4 2.0 NaN