Python 数据帧索引过滤
我有两个相同时间分辨率的数据帧。从第一个数据帧(在我的例子中为df_data1)开始,我只想得到所有值['A'],其中['B']小于90。现在我想过滤我的secound数据帧,这样我就只有第一个数据帧中具有相同时间戳(timeindex)的值Python 数据帧索引过滤,python,indexing,pandas,filter,Python,Indexing,Pandas,Filter,我有两个相同时间分辨率的数据帧。从第一个数据帧(在我的例子中为df_data1)开始,我只想得到所有值['A'],其中['B']小于90。现在我想过滤我的secound数据帧,这样我就只有第一个数据帧中具有相同时间戳(timeindex)的值 df_data1 = pd.io.parsers.read_csv(station_path, skiprows=0, index_col=0, na_values=[-999], names= names_header , sep=';', header
df_data1 = pd.io.parsers.read_csv(station_path, skiprows=0, index_col=0, na_values=[-999], names= names_header , sep=';', header=None , squeeze=True)
date A B
16.08.2013 03:00 -1 97
16.08.2013 03:15 -1 95
16.08.2013 03:30 0 92
16.08.2013 03:45 4 90
16.08.2013 04:00 18 88
16.08.2013 04:15 42 86
16.08.2013 04:30 73 83
16.08.2013 04:45 110 81
16.08.2013 05:00 151 78
现在我想要所有的df_数据['A'],其中df_数据['B']是好的,你的第一部分基本完成了:
df_data = df_data[(df_data['B'] < 90)]
编辑
不清楚为什么会出现键错误
,但您也可以使用以下选项:
df_data2[df_data2.index.isin(df_data1.index)]
这将处理第二个df中不存在的任何索引值。要完成此操作:
- 在第一种方法中,我犯了一个错误
df_data2[df_data2.index.isin(df_data1.index)]Thx回答!我得到了这个错误:文件“C:\WinPython-64bit-2.7.9.3\python-2.7.9.amd64\lib\site packages\pandas\core\index.py”,第1283行,在“has\u valid\u type(key,self.obj.\u get\u axis\u name(axis)))中,你是在逐字使用我的答案还是这样做:
df\u data2.loc[df\u data.index]
?df_数据1来自TimeSeries类型,df_数据2来自DataFrame类型这是一个问题吗?它应该仍然有效,您可以发布原始输入数据和代码来重现您的问题,另一种方法是df_数据2[df_数据2.index.isin(df_数据1.index)]
df_data = df_data[(df_data['B'] < 90)]
In [40]:
df1.loc[df_data.index]
Out[40]:
w x y z
date
2013-08-16 04:00:00 0 0 0 0
2013-08-16 04:15:00 0 0 0 0
2013-08-16 04:30:00 47 47 48 0
2013-08-16 04:45:00 77 78 79 88
2013-08-16 05:00:00 111 112 125 NaN
df_data2[df_data2.index.isin(df_data1.index)]