2015-03-25 230 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)]