Python Pandas:将数据帧减少为包含重复状态

时间:2018-04-11 12:41:52

标签: python pandas dataframe

这是我在这里提出的第一个问题,我无法找到解决问题的简单方法。

我想减少包含状态更改的数据框。 类似于" .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()"构造,但在较长的时间序列数据上它很慢。

希望您找到一种更优雅的方式,可以在较长的时间序列数据上快速运行。

提前感谢您的帮助!

1 个答案:

答案 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