[英]Convert row to column with pandas
嗨,我有一個這樣的數據框:
data = DataFrame({"id": ["a", "a", "a", "a", "b", "b", "c", "c", "c", "a", "a"], "nr": [1,2,3,4,1,2,1,2,3,1,2]})
打印數據
id nr
0 a 1
1 a 2
2 a 3
3 a 4
4 b 1
5 b 2
6 c 1
7 c 2
8 c 3
9 a 1
10 a 2
我想要的輸出是:
id 1 2 3 4
a 1 2 3 4
a 1 2 NaN NaN
b 1 2 NaN NaN
c 1 2 3 NaN
我使用的是“數據透視表”,但由於索引不是唯一的,因此無法使用。 所以我創建了另一個組,但是數據透視似乎只允許有一個索引作為選項。
data2 = DataFrame({
"id": ["a", "a", "a", "a", "b", "b", "c", "c", "c", "a", "a"],
"group": [1,1,1,1,1,1,1,1,1,2,2],
"nr": [1,2,3,4,1,2,1,2,3,1,2]
})
我也嘗試過使用pivot_table,它允許多索引,但我也做不到。 有人知道嗎?
要解決旋轉中的非唯一性問題,您可以使用cumsum
技巧來區分這兩個“ a”組。
# use cumsum trick to produce distinct labels
data['group_labels'] = (data['id'] != data['id'].shift(1)).cumsum()
print(data)
id nr group_labels
0 a 1 1
1 a 2 1
2 a 3 1
3 a 4 1
4 b 1 2
5 b 2 2
6 c 1 3
7 c 2 3
8 c 3 3
9 a 1 4
10 a 2 4
# this maps group_labels to id
labels_to_id = data.groupby('group_labels')['id'].first()
labels_to_id
group_labels
1 a
2 b
3 c
4 a
# do pivoting
data.pivot('group_labels', 'nr', 'nr').set_index(labels_to_id.values).sort_index()
nr 1 2 3 4
a 1 2 3 4
a 1 2 NaN NaN
b 1 2 NaN NaN
c 1 2 3 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.