嗨,大家好想我有时间序列数据。 如何过滤仅在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
如何在熊猫中做到这一点?
答案 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