簡體   English   中英

如何在 Pandas 中過濾 +/- 1 天的班次?

[英]How to filter shift +/- 1 day in 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

如何在熊貓中做到這一點?

我會使用 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

您想將條件括在括號中並使用按位| 而不是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

將日期列轉換為日期時間對象。 然后你可以計算天之間的差異。 之后,您可以過濾要保留的天數差異

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM