我有這個df我已經融化的資料框,然后使用 pd.pivot_table 我能夠恢復表結構,至少查看看起來如此的行 - 但索引變成了MultiIndex型別 - 有沒有辦法改回RangeIndex它在原版中df
以下是步驟
>>> import pandas as pd
>>> df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
'Math': ['A ', 'B', 'A', 'F', 'D', 'C'],
'Mental Math': ['A', 'A', 'B', 'C', 'E', 'B'],
'English': ['C', 'B', 'B', 'A ', 'F', 'A'],
'Bengali': ['C', 'C', 'A', 'B', 'A ', 'B'],
'Age': [13, 16, 16, 15, 15, 13]})
>>> print(df)
Name Math Mental Math English Bengali Age
0 Bob A A C C 13
1 John B A B C 16
2 Foo A B B A 16
3 Bar F C A B 15
4 Alex D E F A 15
5 Tom C B A B 13
>>> d = df.melt(var_name='Column', value_name='Value')
>>> print(d)
Column Value
0 Name Bob
1 Name John
2 Name Foo
3 Name Bar
4 Name Alex
5 Name Tom
6 Math A
7 Math B
8 Math A
9 Math F
10 Math D
11 Math C
12 Mental Math A
13 Mental Math A
14 Mental Math B
15 Mental Math C
16 Mental Math E
17 Mental Math B
18 English C
19 English B
20 English B
21 English A
22 English F
23 English A
24 Bengali C
25 Bengali C
26 Bengali A
27 Bengali B
28 Bengali A
29 Bengali B
30 Age 13
31 Age 16
32 Age 16
33 Age 15
34 Age 15
35 Age 13
是否可以像在原始索引中一樣回傳原始表使用 pandas.pivot_table 嘗試回傳原始資料幀,但如果您看到索引現在已成為 MultiIndex 型別
>>> df_back = pd.pivot_table(data = d, index=['Name','Age'], columns=['Column'], aggfunc=''.join, margins=False)
>>> print(df_back)
Value
Column Bengali English Math Mental Math
Name Age
Alex 15 A F D E
Bar 15 B A F C
Bob 13 C C A A
Foo 16 A B A B
John 16 C B B A
Tom 13 B A C B
>>> print(df_back.index)
MultiIndex([('Alex', 15),
( 'Bar', 15),
( 'Bob', 13),
( 'Foo', 16),
('John', 16),
( 'Tom', 13)],
names=['Name', 'Age'])
>>> print(df.index)
RangeIndex(start=0, stop=6, step=1)
uj5u.com熱心網友回復:
正如@mozway 所說,您的代碼不起作用,必須缺少某些步驟
但是從 d 到 df 你可以使用unstack. 您需要一個唯一索引才能作業,因此這是'count'列的來源
(d.assign(count = np.arange(len(d))%6)
.set_index(['count','Column'])
.unstack(level=1)
.reset_index(drop = True)
.droplevel(level = 0, axis=1)
)
輸出
Age Bengali English Math Mental Math Name
-- ----- --------- --------- ------ ------------- ------
0 13 C C A A Bob
1 16 C B B A John
2 16 A B A B Foo
3 15 B A F C Bar
4 15 A F D E Alex
5 13 B A C B Tom
uj5u.com熱心網友回復:
這是一種方法:
(i)groupby 'Column'并申請pd.Series每組'Value'
(ii) unstack0級
d = df.melt(var_name='Column', value_name='Value')
out = d.groupby('Column')['Value'].apply(lambda x: pd.Series(list(x))).unstack(0).rename_axis([None], axis=1)
另一種方法是創建一個“索引”列并使用pivot:
out = d.assign(index=np.arange(len(d))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412444.html
標籤:
上一篇:將資料框串列組合成R中的新資料框
下一篇:用一列擴展資料框,僅使用正數
