我从 Kaggle 下载了一个用于我的项目的数据集,我想创建新列并根据现有列分配它们的值。
我的实际数据集很复杂,我将给出一个类似但更简单的数据集以便于讨论。
输入:
Month | Fruit | Weight
------- -------- --------
1-2020 | Orange | 0.2
1-2020 | Kiwi | 0.9
2-2020 | Orange | 2.1
2-2020 | Kiwi | 1.4
...... | ..... | ...
为了能够创建所需的折线图,我需要更改此数据集结构,使用
Orange, Kiwi
值创建 Weight
新列,以便 Month
不重复。
所需输出:
Month | Orange | Kiwi
------- -------- ------
1-2020 | 0.2 | 0.9
2-2020 | 2.1 | 1.4
您正在寻找的基本东西是一个支点:
import pandas as pd
data = {
'Month': ['1-2020', '1-2020', '2-2020', '2-2020'],
'Fruit': ['Orange', 'Kiwi', 'Orange', 'Kiwi'],
'Weight': [0.2, 0.9, 2.1, 1.4]
}
df = pd.DataFrame(data)
pivot_df = df.pivot_table(index='Month', columns='Fruit', values='Weight')
print(pivot_df)
输出:
Fruit Kiwi Orange
Month
1-2020 0.9 0.2
2-2020 1.4 2.1
如果您希望将月份作为列而不是索引:
pivot_df.reset_index(inplace=True)
pivot_df.columns.name = None
print(pivot_df)
输出:
Month Kiwi Orange
0 1-2020 0.9 0.2
1 2-2020 1.4 2.1
如果原始数据中存在重复的 Month 和 Fruit 组合,并且您想要将它们相加(例如):
data = {
'Month': ['1-2020', '1-2020', '1-2020', '2-2020', '2-2020'],
'Fruit': ['Orange', 'Kiwi', 'Kiwi', 'Orange', 'Kiwi'],
'Weight': [0.2, 0.9, 1.1, 2.1, 1.4]
}
df = pd.DataFrame(data)
pivot_df = df.pivot_table(index='Month', columns='Fruit', values='Weight', aggfunc='sum')
print(pivot_df)
输出:
Fruit Kiwi Orange
Month
1-2020 2.0 0.2
2-2020 1.4 2.1