нарезка кадра данных на основе значений строк и столбцов в отдельном кадре данных - PullRequest
1 голос
/ 27 марта 2020

Проблема заключается в поиске матрицы значений, где индекс и идентификатор строки хранятся в отдельном кадре данных, и сопоставлении этого значения с новым столбцом.

В настоящее время у меня есть матрица поиска значений, относящихся к к скорости и направлению ветра, где имена столбцов строк представляют собой направленные градусы, а индексом является значение скорости:

value_df:

      0     2       4
0     9.7   5.6   4.0
0.1   9.8   5.7   4.1
0.2   7.1   3.6   4.4
0.3   1.1   1.2   0.9
0.4   4.1   3.3   7.5
0.5   4.3   5.8   3.6
0.6   0.6   0.7   9.8
0.7   5.4   0.1   5.4
0.8   7.0   7.4   4.0
0.9   7.9   6.6   8.9
1.0   8.9   7.6   7.4

У меня большой временной ряд:

met_data_df:

DateTime                    Speed     Direction
1999-01-01 00:00:00         0.2     0
1999-01-01 01:00:00         0.3     4
1999-01-01 02:00:00         0.5     2
1999-01-01 03:00:00         1.0     4
1999-01-01 04:00:00         0       4
...                         ...     ...
1999-11-02 11:00:00         0.4     0
1999-11-02 12:00:00         0.9     0
1999-11-02 13:00:00         0.7     0
1999-11-02 14:00:00         0.4     2
1999-11-02 15:00:00         0.3     4

Что я хочу сделать, это сопоставить первую матрицу со второй, где значение выбирается на основе скорости в зависимости от индекса и значения направления против метки строки.

DateTime                    Speed   Direction   Value
1999-01-01 00:00:00         0.2     0           7.1
1999-01-01 01:00:00         0.3     4           0.9
1999-01-01 02:00:00         0.5     2           5.8
1999-01-01 03:00:00         1.0     4           7.4
1999-01-01 04:00:00         0       4           ...
...                         ...     ...         ...
1999-11-02 11:00:00         0.4     0
1999-11-02 12:00:00         0.9     0
1999-11-02 13:00:00         0.7     0
1999-11-02 14:00:00         0.4     2
1999-11-02 15:00:00         0.3     4

Я попытался построить лямбда-функцию и предпринять дополнительную попытку объединения нескольких столбцов, однако мне удалось отобразить только всю строку на основе скорости ветра.

met_data_df.merge(value_df,left_on='Speed',right_index=True)

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вы должны гарантировать, что имена вашего индекса и столбца в df совместимы с типами столбцов скорости / направления в df2 ... поэтому, если скорость / направление имеют значения c в df2, убедитесь, что они ' Также укажите c в df ... (например: вам может понадобиться df.columns = pd.to_numeric(df.columns) et c ...)

Однако вы можете использовать DataFrame.lookup здесь:

df2['Value'] = df.lookup(df2['Speed'], df2['Direction'])
0 голосов
/ 27 марта 2020

Вам нужно сделать две вещи: расплавить value_df и затем объединить с met_data_df

import pandas as pd

value_df = pd.DataFrame({0: [0, 1, 2, 4],
                         2: [4, 5, 6, 7],
                         4: [8, 9, 10, 11]},
                        index=[0, 0.1, 0.2, 0.3])

met_data_df = pd.DataFrame({'DateTime': [0, 1, 2, 3],
                            'Speed': [0.2, 0.3, 0.1, 0.4],
                            'Direction': [0, 4, 2, 4]})

value_melted = (value_df.reset_index()
                        .melt(id_vars='index'))

value_melted.columns = ['Speed', 'Direction', 'value']
pd.merge(met_data_df, value_melted, on=['Speed', 'Direction'], how='left')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...