你可以使用pd.lreshape
:
import pandas as pd
df = pd.DataFrame([['1/1/15', '5/22/14', '7/12/13', 5, 6, 3]],
columns=['DATE1', 'DATE2', 'DATE3', 'AMOUNT1', 'AMOUNT2', 'AMOUNT3'])
result = pd.lreshape(df, {'AMOUNT': ['AMOUNT1', 'AMOUNT2', 'AMOUNT3'],
'DATE': ['DATE1', 'DATE2', 'DATE3']})
print(result)
產生
DATE AMOUNT
0 1/1/15 5
1 5/22/14 6
2 7/12/13 3
的第二個參數是pd.lreshape
鍵/值對的字典。每個鍵都是 所需列的名稱,每個值都是您希望合併到一列中的df
列的列表。
請參閱文檔字符串help(pd.lreshape)
,瞭解更多關於pd.lreshape
的信息。
或者,你可以使用pd.melt
所有列合併成一列,並使用str.extract
到文本的部分從列名的數字部分分開。然後使用pivot
,以獲得所期望的結果:
result = pd.melt(df)
result[['variable', 'num']] = result['variable'].str.extract('(\D+)(\d+)', expand=True)
result = result.pivot(index='num', columns='variable', values='value')
print(result)
產生
variable AMOUNT DATE
num
1 5 1/1/15
2 6 5/22/14
3 3 7/12/13
TIL關於lreshape! – DSM
謝謝。你能否在reshape()中解釋代碼? – Windstorm1981
謝謝!非常清楚和有益的。有沒有很好的資源來找到這些「模糊」的方法?我不僅不熟悉lreshape() - 我甚至不知道在哪裏尋找這樣的方法。 – Windstorm1981