我目前有一个 Pandas 数据框,df 像这样
df = pd.DataFrame({'Name': ['A','B','C'], 'Type': ['Car', 'Car', 'Truck'] , '01/01/1991, RED': [10, 26, 30], '01/02/1991, YELLOW': [11,15,5], '01/05/1991, BLUE':[5,8,20]})
Name | Type | 01/01/1991, RED | 01/02/1991, YELLOW | 01/05/1991, BLUE |
A | Car | 10 | 11 | 5 |
B | Car | 26 | 15 | 8 |
C | Truck | 30 | 5 | 20 |
我正在寻找输出
Name | Date | Type | Color | Number
A | 01/01/1991 | Car | RED | 10
A | 01/02/1991 | Car | YELLOW | 11
A | 01/05/1991 | Car | BLUE | 5
B | 01/01/1991 | Car | RED | 26
B | 01/02/1991 | Car | YELLOW | 15
B | 01/05/1991 | Car | BLUE | 8
C | 01/01/1991 | Truck | RED | 30
C | 01/02/1991 | Truck | YELLOW | 5
C | 01/05/1991 | Truck | BLUE | 20
到目前为止,我能够调换表格并清理日期。但我不确定如何按照以下方式复制日期并设置颜色。对于这种情况,.pivot_table 或 .transpose() 会更好吗?任何见解都值得赞赏。
最佳答案
试试这个,有很多方法可以解决这个 reshape :
dfi = df.set_index(["Name", "Type"])
dfi.columns = dfi.columns.str.split(", ", expand=True).rename(['Date', 'Color'])
df_out = (
dfi.stack([0, 1])
.rename("Number")
.reset_index()
)
df_out
输出:
Name Type Date Color Number
0 A Car 01/01/1991 RED 10.0
1 A Car 01/02/1991 YELLOW 11.0
2 A Car 01/05/1991 BLUE 5.0
3 B Car 01/01/1991 RED 26.0
4 B Car 01/02/1991 YELLOW 15.0
5 B Car 01/05/1991 BLUE 8.0
6 C Truck 01/01/1991 RED 30.0
7 C Truck 01/02/1991 YELLOW 5.0
8 C Truck 01/05/1991 BLUE 20.0
解释:
将“名称”和“类型”移动到索引中,用逗号和空格分割剩余列的列标题,以创建 MultiIndex 列标题。接下来,将两个级别堆叠到索引,然后进行一些重命名以根据需要创建列并重置索引。
关于python - 转置 pandas 数据框并垂直 append ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68968016/