5
所以我有一個包含我想修復一些錯誤的信息的數據幀:Python的熊貓GROUPBY重置價值
import pandas as pd
tuples_index = [(1,1990), (2,1999), (2,2002), (3,1992), (3,1994), (3,1996)]
index = pd.MultiIndex.from_tuples(tuples_index, names=['id', 'FirstYear'])
df = pd.DataFrame([2007, 2006, 2006, 2000, 2000, 2000], index=index, columns=['LastYear'])
df
Out[4]:
LastYear
id FirstYear
1 1990 2007
2 1999 2006
2002 2006
3 1992 2000
1994 2000
1996 2000
ID是指一個企業,而這個數據幀是一個小例子片更大的一個顯示企業如何移動。每個記錄都是一個獨特的位置,我想捕捉它的第一年和最後一年。目前的「LastYear」對於只有一條記錄的企業而言是準確的,並且爲最新的企業記錄準確記錄多條記錄。什麼DF應該像在最後是這樣的:
LastYear
id FirstYear
1 1990 2007
2 1999 2002
2002 2006
3 1992 1994
1994 1996
1996 2000
而且我做了什麼讓它有超笨拙:
multirecord = df.groupby(level=0).filter(lambda x: len(x) > 1)
multirecord_grouped = multirecord.groupby(level=0)
ls = []
for _, group in multirecord_grouped:
levels = group.index.get_level_values(level=1).tolist() + [group['LastYear'].iloc[-1]]
ls += levels[1:]
multirecord['LastYear'] = pd.Series(ls, index=multirecord.index.copy())
final_joined = pd.concat([df.groupby(level=0).filter(lambda x: len(x) == 1),multirecord]).sort_index()
有沒有更好的辦法?
還有誰,但你可以得到一切只用一行做了什麼? – Kartik
對不起,從一開始就沒有提到這一點,但是正在操作的數據幀是〜5400萬行。此代碼非常優雅,但需要數小時才能運行。你能想到任何可以加快速度的東西嗎? – jesseWUT