2015-03-25 113 views
1

我有两个数据帧在相同的时间分辨率。从第一个数据帧(在我的情况下:df_data1)我只想要所有值['A']其中['B']是< 90.现在我想筛选我的secound数据框,以便我只有值从我的第一个数据帧熊猫数据帧索引过滤

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 

现在同样的时间戳(timeindex)我想都df_data [ 'A'],其中df_data [ 'B']是所以我做的:

df_data = df_data[(df_data['B'] < 90)] 

第二数据帧的样子:

df_data2 = pd.io.parsers.read_csv(station_path, skiprows=1, sep=";", index_col=False, header=None) 

date w x y z 
16.08.2013 03:00 0 0 0 0 
16.08.2013 03:15 0 0 0 0 
16.08.2013 03:30 0 0 0 0 
16.08.2013 03:45 0 0 0 0 
16.08.2013 04:00 0 0 0 0 
16.08.2013 04:15 0 0 0 0 
16.08.2013 04:30 47 47 48 0 
16.08.2013 04:45 77 78 79 88 
16.08.2013 05:00 111 112 113 125 

有没有人有想法解决这个问题? 我需要在相同的形状的数据框原因此外,我想计算np.corrcoef等。

回答

2

嗯,你的第一部分几乎完成:

df_data = df_data[(df_data['B'] < 90)] 

然后你可以使用df_data['A']

访问A列,如果你的索引值是相同的两个df,可以那么这应该工作:

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 

编辑

不清楚为什么你会得到一个KeyError但你也可以使用以下命令:

df_data2[df_data2.index.isin(df_data1.index)] 

这将处理中不存在在你的第二个DF任何索引值。

+0

Thx回答! 我得到了此错误: 文件“C:\ WinPython-64bit-2.7.9.3 \ python-2.7.9.amd64 \ lib \ site-packages \ pandas \ core \ indexing.py”,第1283行,在_has_valid_type中 ( key,self.obj._get_axis_name(axis))) – steff 2015-03-25 10:53:20

+0

你正在使用我的答案逐字或做这个:'df_data2.loc [df_data.index]'? – EdChum 2015-03-25 10:56:28

+0

df_data1是从类型TimeSeries 和 df_data2是从类型DataFrame 这是一个问题? – steff 2015-03-25 10:57:56

1

来完成这样的:第一种方法

  • 我得到一个错误

但具有下列表达式效果很好:

df_data2 [df_data2.index.isin(df_data1 .index)]