2017-06-15 104 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它不,它填补了一切,然后我回去复制月份并输入正确的字符串。 –