Сгруппируйся с пандами и получи соединительные ряды - PullRequest
0 голосов
/ 03 мая 2018

Я работаю с pandas, и у меня возникла проблема. Я использую метод groupby, чтобы сгруппировать столбцы и найти максимальные и средние значения. Моя проблема в том, что я хочу сгруппировать по столбцу time_stamp и получить максимальный (values_1) и средний (values_2) элемент в столбцах значений, но я хочу знать, что project_id также является максимальным. Я приложил свою таблицу ввода и нужную таблицу. Заранее благодарю за помощь!

Моя таблица ввода:

id          time_stamp     project_id value_1 value_2
- ---------------------------------------------------
0    2018-05-02 04:00:25          41   3       3
1    2018-05-02 04:00:25          42   4       3
2    2018-05-02 04:00:25          76   6       1
3    2018-05-02 04:00:25          39   8       7
4    2018-05-02 04:00:25          10   1       2
5    2018-05-02 04:10:25          33   3       7
6    2018-05-02 04:10:25          15   6       8
7    2018-05-02 04:10:25          34   6       9
8    2018-05-02 04:10:25          22   9       4
9    2018-05-02 04:10:25          58   6       1

Мой желаемый вывод:

id      time_stamp            max_id  value_1   value_2
- ---------------------------------------------------
3    2018-05-02 04:00:25          39   8       7
8    2018-05-02 04:10:25          22   9       4

Моя попытка:

pd_table.groupby('time_stamp').agg({'value_1':'max','value_2':'mean'}).reset_index()

1 Ответ

0 голосов
/ 03 мая 2018

Используйте DataFrameGroupBy.idxmax для индексов по максимальному значению столбца value_1, поэтому сначала создайте индекс по столбцу project_id по set_index:

df = (pd_table.set_index('project_id')
              .groupby('time_stamp')
              .agg({'value_1':['max', 'idxmax'],'value_2':'mean'}))
print (df)
                    value_1        value_2
                        max idxmax    mean
time_stamp                                
2018-05-02 04:00:25       8     39     3.2
2018-05-02 04:10:25       9     22     5.8

Получить MultiIndex в столбцах, поэтому необходима некоторая очистка:

#flattening MultiIndex
df.columns = df.columns.map('_'.join)
d = {'value_1_idxmax':'max_id','value_1_max':'value_1','value_2_mean':'value_2'}
#rename and change order of columns 
df = df.rename(columns=d).reindex(columns=['max_id','value_1','value_2']).reset_index()
print (df)
            time_stamp  max_id  value_1  value_2
0  2018-05-02 04:00:25      39        8      3.2
1  2018-05-02 04:10:25      22        9      5.8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...