Pandas drop duplicates and replace the value by the nanmean of the duplicates( pandas 丢弃了副本,并用副本的纳米平均值替换了值)
本文介绍了 pandas 丢弃了副本,并用副本的纳米平均值替换了值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个通过追加4个数据帧创建的数据帧(index=date)。正因为如此,我的索引中有重复项,通常同一天有3个nans和1个值。 我的目标是将此数据帧上采样到每天的频率(df = df.resample('1D)
),但在此之前,我必须删除重复项。
我想删除重复的时间,但根据两个条件:
- 对于同一天,如果我们至少有1个值,则计算这些值的纳平均值,然后丢弃其余的。
- 同一天,如果我们只有NaN,则在我们保留的行中放一个NaN。
我猜使用np.nanean()将涵盖这两个条件(如果没有值,则返回NaN,否则返回值的平均值)。
例如:
df = pd.DataFrame({'Pt0': [nan, -42.0, nan, nan, -26.0, nan, nan, nan, 0.0, -10.0]},
index=['1984-06-10 00:00:00.096000064', '1984-06-10 00:00:00.096000064',
'1984-07-20 00:00:00.176000000', '1984-07-20 00:00:00.176000000',
'1984-07-28 00:00:00.192000000', '1984-07-28 00:00:00.192000000',
'1984-09-06 00:00:00.080000000', '1984-09-06 00:00:00.080000000',
'1984-09-06 00:00:00.271999936', '1984-09-06 00:00:00.271999936'])
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()
函数,它就会起作用。
我怎么能这样做?
推荐答案
首先,将索引转换为DateTime对象。然后您可以groupby
索引并转换np.nanmean
;然后drop_duplicates
:
df.index = pd.to_datetime(df.index)
out = df.groupby(level=0)['Pt0'].transform(np.nanmean).drop_duplicates().to_frame()
输出:
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
这篇关于 pandas 丢弃了副本,并用副本的纳米平均值替换了值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:pandas 丢弃了副本,并用副本的纳米平均值替换了值


猜你喜欢
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01