我有一個看起來像這樣的資料集
| 一個 | 乙 | C |
|---|---|---|
| A1 | 1 | 1.3 |
| A1 | 2 | 1.4 |
| A1 | 3 | 1.3 |
| A2 | 1 | 1.7 |
| A2 | 2 | 1.6 |
| A2 | 3 | 1.5 |
| A1 | 1 | 1 |
| A1 | 2 | 2.7 |
| A1 | 3 | 2.4 |
| A2 | 1 | 1.6 |
| A2 | 2 | 1.7 |
| A2 | 3 | 1.2 |
期望的輸出:
| 一個 | 1 | 2 | 3 |
|---|---|---|---|
| A1 | 1.3 | 1.4 | 1.3 |
| A1 | 1 | 2.7 | 2.4 |
| A2 | 1.7 | 1.6 | 1.5 |
| A2 | 1.6 | 1.7 | 1.2 |
我嘗試了一個資料透視表,但它提供了聚合,并且沒有聚合透視,由于重復索引,它顯示重復索引錯誤。處理這個問題的最佳方法是什么?
uj5u.com熱心網友回復:
您可以使用元素數量(假設所有組合具有相同數量的元素)進行迭代,如下所示:
dfx = df.pivot_table(index='A', columns='B', values='C', aggfunc=list)
pd.concat([dfx.applymap(lambda x:x[idx]) for idx in range(dfx.apply(lambda x: len(x)).max())])
| 一個 | 1 | 2 | 3 |
|---|---|---|---|
| A1 | 1.3 | 1.4 | 1.3 |
| A2 | 1.7 | 1.6 | 1.5 |
| A1 | 1 | 2.7 | 2.4 |
| A2 | 1.6 | 1.7 | 1.2 |
老答案:
看到您的示例資料框,一個簡單的支點應該可以做到:
df.pivot_table(index='A', columns='B', values='C', aggfunc='mean')
uj5u.com熱心網友回復:
嘗試:
df = df.pivot_table(index="A", columns="B", values="C", aggfunc=list)
df = df.explode(df.columns.to_list()).reset_index()
df.columns.name = None
print(df)
印刷:
A 1 2 3
0 A1 1.3 1.4 1.3
1 A1 1.0 2.7 2.4
2 A2 1.7 1.6 1.5
3 A2 1.6 1.7 1.2
uj5u.com熱心網友回復:
一種選擇是在透視之前創建一個額外的列,為您的資料引入唯一性:
a = df.groupby('A').ngroup().diff().fillna(0, downcast = 'infer')
a = a.mask(a < 0, 1).cumsum()
(df
.assign(temp = a)
.pivot(['temp', 'A'], 'B', 'C')
.droplevel(0)
.rename_axis(columns = None)
)
1 2 3
A
A1 1.3 1.4 1.3
A2 1.7 1.6 1.5
A1 1.0 2.7 2.4
A2 1.6 1.7 1.2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496124.html
標籤:Python 熊猫 数据框 枢 熊猫-groupby
上一篇:按行數對熊貓資料框串列進行排序?
