这是我在这里提出的第一个问题,我无法找到解决问题的简单方法。
我想减少包含状态更改的数据框。 类似于" .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和iterrows()"构造,但在较长的时间序列数据上它很慢。
希望您找到一种更优雅的方式,可以在较长的时间序列数据上快速运行。
提前感谢您的帮助!
答案 0 :(得分:1)
一种方法是将您的系列与移动一个值的系列进行比较:
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