我有一个数据框,其中的列块需要重新调整为行。 我尝试使用stack()和melt(),但未能找到正确的方法
以下是我所期望的一个例子:
data = {'id':['a1', 'a2', 'a3', 'a4'],
'year':[20, 20, 19, 18],
'b_A': [1, 2, 3, 4],
'b_B': [5, 6, 7, 8],
'b_C': [9, 10, 11, 12],
'c_A': [13, 14, 15, 16],
'c_B': [17, 18, 19, 20],
'c_C': [21, 22, 23, 24],
'd_A': [25, 26, 27, 28],
'd_B': [29, 30, 31, 32],
'd_C': [33, 34, 35, 36],
}
df = pd.DataFrame(data)
id year b_A b_B b_C c_A c_B c_C d_A d_B d_C
0 a1 20 1 5 9 13 17 21 25 29 33
1 a2 20 2 6 10 14 18 22 26 30 34
2 a3 19 3 7 11 15 19 23 27 31 35
3 a4 18 4 8 12 16 20 24 28 32 36
预期结果应该是:
id year origin A B C
0 a1 20 b 1 5 9
1 a1 20 c 13 17 21
2 a1 20 d 25 29 33
3 a2 20 b 2 6 10
4 a2 20 c 14 18 22
5 a2 20 d 26 30 34
6 a3 19 b 3 7 11
7 a3 19 c 15 19 23
8 a3 19 d 27 31 35
9 a4 18 b 4 8 12
10 a4 18 c 16 20 24
11 a4 18 d 28 32 36
谢谢你的时间和帮助
您可以将带有} 索引,然后按^{} 拆分列并按^{} 重新整形:
_
的非列名称转换为按^{如果还需要设置列} :
origin
,可以使用^{或者使用^{} 和
_
类似A_b
到b_A
的值的变化顺序:您还可以使用来自pyjanitor的pivot_longer函数;目前,您必须从github安装最新的开发版本:
names_sep
值分割列;与.value
成对的分割值仍然作为列标题,而其他值集中在origin
列下面如果希望数据按外观顺序排列,可以使用
sort_by_appearance
参数:相关问题 更多 >
编程相关推荐