簡體   English   中英

用熊貓將行轉換為列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM