如何在Pandas过滤+/- 1天?

时间:2015-07-30 09:18:40

标签: python pandas

嗨,大家好想我有时间序列数据。 如何过滤仅在1天内发生的数据不同?

假设数据是

date         name
2015-04-03    A
2015-04-04    A
2015-04-05    A
2015-04-03    B

我想做的是像

df[df.shift(1).contains(df.name) or df.shift(-1).contains(df.name)]

会给我

date         name
2015-04-03    A
2015-04-04    A
2015-04-05    A

如何在熊猫中做到这一点?

3 个答案:

答案 0 :(得分:1)

我会将value_counts用于日期:

vc = df.date.value_counts()

然后我会,如果数据集很小,我会使用.isin

df[df.date.isin(vc[vc == 1].index.tolist())]

         date name
1  2015-04-04    A
2  2015-04-05    A

如果数据集较大,我会使用合并操作:

df_singles = df.merge(left_on='date',right=pd.DataFrame(vc[vc == 1]), right_index=True)
del df_singles[0]

         date name
1  2015-04-04    A
2  2015-04-05    A

答案 1 :(得分:0)

您希望将条件包装在括号中并使用按位|代替or

In [83]:
df[(df['name'].shift(1) == df['name']) | (df['name'].shift(-1) == df['name']) ]

Out[83]:
        date name
0 2015-04-03    A
1 2015-04-04    A
2 2015-04-05    A

答案 2 :(得分:0)

将日期列转换为datetime对象。然后你可以计算天数之间的差异。之后,您可以过滤要保留的天数差异

data['date'] = pd.to_datetime(data['date'])
data['Diff'] = data['date'].diff()
print data

        date name    Diff
0 2015-04-03    A     NaT
1 2015-04-04    A  1 days
2 2015-04-05    A  1 days
3 2015-04-03    B -2 days

data_filtered = data[data['Diff'] == '1 days']
del data_filtered['Diff']
print data_filtered

        date name
1 2015-04-04    A
2 2015-04-05    A