这是我在这里提出的第一个问题,我找不到解决问题的简单方法。
我想减少包含状态变化的数据框。 与“.drop_duplicates()”类似,我想减少具有重复状态的数据帧,但它应该只在状态没有改变时删除该行。
这是我的示例数据框:
df = pd.DataFrame(data=({'Date':('Day1', 'Day2', 'Day3', 'Day4', 'Day5'),
'State':(1,0,0,2,0)}),
columns=(['State']), index=(['Date']))
df_reduced = df.drop_duplicates
df_reduced
不幸的是,结果不是想要的结果:
Out[]:
State
Date
Day1 1
Day2 0
Day4 2
所需的输出还将包含状态为 0 的第 5 天。
我尝试使用“for and iterrows()”构造,但在处理较长时间序列数据时速度非常慢。
希望您能找到一种更优雅的方式,它可以快速处理更长的时间序列数据。
提前感谢您的帮助!
最佳答案
一种方法是将您的系列与移动一个值的系列进行比较:
df = pd.DataFrame(data={'Date':('Day1', 'Day2', 'Day3', 'Day4', 'Day5'),
'State':(1,0,0,2,0)})
df = df.set_index('Date')
res = df.loc[df['State'] != df['State'].shift()]
print(res)
# State
# Date
# Day1 1
# Day2 0
# Day4 2
# Day5 0
关于 python Pandas : reduce dataframe to contain with duplicate states,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775476/