2015-03-25 5 views
1

У меня есть два кадра данных с одинаковым временным разрешением. Из первого блока данных (в моем случае: df_data1) я хочу только иметь все значения ['A'], где ['B'] равно < 90. И теперь я бы хотел отфильтровать свой привязанный фрейм данных так, чтобы у меня были только значения с той же меткой времени (timeindex) из моего первого dataframepandas dataframe индексация фильтрация

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_data [ 'A'], где df_data [ 'B'] является < 90. Так что я:

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

второй dataframe выглядит следующим образом:

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']

если значения индекса одинаковы в обоих ДФ, то это должно работать:

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 

EDIT

Неясная почему вы получите KeyError но вы можете использовать также следующие:

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

Это будет обрабатывать любые значения индекса, которые не присутствуют в вашей второй ФР.

+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

+0

Вы используете мой ответ дословно или делаете это: 'df_data2.loc [df_data.index]'? – EdChum

+0

df_data1 от Тип TimeSeries и df_data2 от Тип DataFrame это проблема? – steff

1

завершить это:

  • с первым подходом, который я получил ошибку

, но с выражением она хорошо работает:

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

Смежные вопросы