[英]Pandas drop duplicates and replace the value by the nanmean of the duplicates
我有一个通过附加 4 个数据帧创建的 dataframe(索引 = 日期)。 因此,我的索引中有重复项,通常在同一天有 3 个 NaN 和 1 个值。 我的目标是将这个 dataframe 上采样到每日频率( df = df.resample('1D)
),但在此之前我必须删除重复项。
我想删除时间重复,但根据 2 个条件:
我猜想使用 np.nanmean() 将涵盖这两个条件(当没有值时返回 NaN,否则返回值的平均值)。
例如:
df =
Pt0
1984-06-10 00:00:00.096000064 NaN
1984-06-10 00:00:00.096000064 -42.0
1984-07-20 00:00:00.176000000 NaN
1984-07-20 00:00:00.176000000 NaN
1984-07-28 00:00:00.192000000 -26.0
1984-07-28 00:00:00.192000000 NaN
1984-09-06 00:00:00.080000000 NaN
1984-09-06 00:00:00.080000000 NaN
1984-09-06 00:00:00.271999936 0
1984-09-06 00:00:00.271999936 -10
df_dropped =
Pt0
1984-06-10 00:00:00.096000064 -42.0
1984-07-20 00:00:00.176000000 NaN
1984-07-28 00:00:00.192000000 -26.0
1984-09-06 00:00:00.080000000 -5.0
我尝试使用df = df.groupby('Pt0').mean().reset_index()
但它最终跳过了 NaN,我想如果df.groupby()
有一个nanmean()
function 它会起作用。
我怎么能那样做?
首先,将索引转换为日期时间对象。 然后你可以按索引np.nanmean
groupby
然后drop_duplicates
:
df.index = pd.to_datetime(df.index)
out = df.groupby(level=0)['Pt0'].transform(np.nanmean).drop_duplicates().to_frame()
Output:
Pt0
0 1984-06-10 00:00:00.096000064 -42.0
1 1984-07-20 00:00:00.176000000 NaN
2 1984-07-28 00:00:00.192000000 -26.0
3 1984-09-06 00:00:00.271999936 -5.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.