2017-06-15 99 views
0

我有以下數據框:插入缺失月排在數據幀在python

Input:- 

ID month Name 
A1 2017.01 A 
A1 2017.02 B 
A1 2017.04 C 
A2 2017.02 A 
A2 2017.03 D 
A2 2017.05 C 

Output:- 

ID month Name 
A1 2017.01 A 
A1 2017.02 B 
A1 2017.03 B 
A1 2017.04 C 
A2 2017.02 A 
A2 2017.03 D 
A2 2017.04 D 
A2 2017.05 C 

我需要得到序列中的缺失個月,每月的前它的價值,這是目前在輸入名單。 考慮ID「A1」的例子。 「A1」有1,2,4個月,並且失去了3個月。所以我需要將值爲「A1」的行添加爲ID,將月份添加爲「2017.03」,並將名稱添加爲「B」。請注意,「名稱」列應該從輸入中出現在其上方的行中獲取其值。

如何在python中實現這一點,或者通過python中的其他方法實現。

任何幫助表示讚賞! 感謝

回答

3

讓我們試試這個與@ EFT的建議:

df['Date'] = pd.to_datetime(df.month.astype(str),format='%Y.%m') 
df_out = df.set_index('Date').groupby('ID').resample('MS').asfreq().ffill().reset_index(level=0, drop=True) 
df_out = df_out.reset_index() 
df_out['month'] = df_out.Date.dt.strftime('%Y.%m') 
df_out = df_out.drop('Date',axis=1) 
print(df_out) 

輸出:

ID month Name 
0 A1 2017.01 A 
1 A1 2017.02 B 
2 A1 2017.03 B 
3 A1 2017.04 C 
4 A2 2017.02 A 
5 A2 2017.03 D 
6 A2 2017.04 D 
7 A2 2017.05 C 
+0

你能不能做到這一點沒有'apply'?只是'df.set_index('Date')。groupby(...'? – EFT

+0

這是天才,快速的問題,雖然如何知道df知道轉發只填寫名稱類別? – Tony

+0

@Tony它不,它填補了一切,然後我回去複製月份並輸入正確的字符串。 –