[英]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.