想法是添加帮助器列,然后按DataFrame.pivot
,将缺少的值添加为DataFrame.reindex
,最后将misisng值转换为0
,并将其转换为整数:
df1 = (df.assign(new = 1)
.pivot('id','Date','new')
.reindex(range(df['Date'].min(), df['Date'].max() + 1), axis=1)
.fillna(0)
.astype(int))
print (df1)
Date 26009 26010 26011 26012 26013 26014 26015 26016 26017 26018
id
1000 1 0 0 0 0 0 0 1 0 1
1001 0 0 0 0 0 0 0 0 1 0
1002 0 1 0 0 0 0 0 0 0 0
1003 1 0 0 0 0 0 0 0 0 0
如果得到:
ValueError:索引包含重复的条目,无法重塑
这意味着像重复的样本数据的最后一行中一样有重复项。然后添加DataFrame.drop_duplicates
:
df = pd.DataFrame({'id':[1000,1001,1000,1002,1003,1000, 1000],
'Date':[26018,26017,26016,26010,26009,26009, 26009]})
df1 = (df.assign(new = 1)
.drop_duplicates(subset=['id','Date'])
.pivot('id','Date','new')
.reindex(range(df['Date'].min(), df['Date'].max() + 1), axis=1)
.fillna(0)
.astype(int))
print (df1)
Date 26009 26010 26011 26012 26013 26014 26015 26016 26017 26018
id
1000 1 0 0 0 0 0 0 1 0 1
1001 0 0 0 0 0 0 0 0 1 0
1002 0 1 0 0 0 0 0 0 0 0
1003 1 0 0 0 0 0 0 0 0 0
注意:我的解决方案不计算行,仅1
在存在相交id
和Date
else时返回0
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句