我正在处理这样的熊猫数据帧
ID have time
1 NaN 2010-07-01
1 1 2010-07-08
1 5 2011-07-08
1 NaN 2011-08-08
1 NaN 2012-05-08
1 NaN 2012-09-08
1 1 2012-10-08
2 NaN 2013-01-18
2 1 2013-02-18
2 NaN 2013-03-18
我想用ID组(个人)替换缺失值,并且只在一年内用个人级别的非缺失值替换记录:
ID have want time
1 NaN NaN 2010-07-01
1 1 1 2010-07-08
1 5 5 2011-07-08
1 NaN 5 2011-08-08
1 NaN 5 2012-05-08
1 NaN NaN 2012-09-08
1 1 1 2012-10-08
2 NaN NaN 2013-01-18
2 1 1 2013-02-18
2 NaN 1 2013-03-18
有什么有效的方法来完成这件事吗?你知道吗
我正在使用下面的代码,似乎对每一行都有效
df = pd.DataFrame([
[1.0, np.nan, np.nan, "2010-07-01"],
[1.0,"1", "1", "2010-07-08"],
[1.0,"5", "5", "2011-07-08"],
[1.0,np.nan, "5", "2011-08-08"],
[1.0, np.nan, "5", "2012-05-08"],
[1.0, np.nan,np.nan, "2012-09-08"],
[1.0,"1", "1", "2012-10-08"],
[2.0, np.nan, np.nan, "2013-01-18"],
[2.0, "1", "1", "2013-02-18"],
[2.0, np.nan, "1", "2013-03-18"]
], columns = ['ID', 'have', 'want', 'time'])
df['time']=pd.to_datetime(df['time'], format='%Y-%m-%d')
def want(df):
for ind, row in df.iterrows():
df.loc[ind,'ewant']=df.loc[ind,'edatum']
if ind != 0:
if pd.isnull(df.loc[ind,'dosage']) == 1:
temp = ind - 1
df.loc[ind,'ewant']=df.loc[temp,'ewant']
else:
pass
else:
pass
df.loc[ind,'timespan']=(df.loc[ind,'edatum'] - df.loc[ind,'ewant']).days
df.loc[ind,'impu']=np.where( 0< (df.loc[ind,'edatum'] - df.loc[ind,'ewant']).days <= 365 , 1, 0)
return df
want(df)
但当我尝试在“ID”组级别应用这个时
want(df.groupby(['ID']))
我得到了一个错误:
AttributeError: Cannot access callable attribute 'iterrows' of 'DataFrameGroupBy' objects, try using the 'apply' method
有什么方法可以解决这个iterrows错误吗?谢谢!你知道吗
这是完美的修复
merge_asof
相关问题 更多 >
编程相关推荐