Как сжать строки панд по запросу? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть база данных в Pandas, стилизованной формы

{Value:[1,2,3,4,5,6,7],Time:[0,0,0,1,1,1,1],Name:[Rat,Rat,Dog,Rat,Rat,Dog,Cat]}.

Моя цель - создать кадр данных, который выглядит как

{Value:[1.5,4.5,3,6,7],Name:[RatT0,RatT1,DogT0,DogT1,CatT1]}.

Я смотрел на pandas.crosstab,pandas.merge и pivot tables, и ни один из них не обеспечивает очевидного способа достичь этого.groupby кажется многообещающим, но я не могу понять, как заставить его уважать уже существующие границы.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Измените имя столбца, затем groupby + mean

df['Name'] = df.Name + 'T' + df.Time.astype('str')
df.groupby('Name', as_index=False).Value.mean()

    Name  Value
0  CatT1    7.0
1  DogT0    3.0
2  DogT1    6.0
3  RatT0    1.5
4  RatT1    4.5

Для иллюстрации вы хотите сформировать группы из одного и того же 'Name' с одинаковым 'Time', так что выgroupby выберет оба этих столбца и выберет, что делать с сгруппированными данными (в этом случае определите среднее значение для столбца 'Value').Затем вы можете изменить имя на нужное и удалить лишний столбец 'Time'.

df = df.groupby(['Name', 'Time'], as_index=False).Value.mean()
#  Name  Time  Value
#0  Cat     1    7.0
#1  Dog     0    3.0
#2  Dog     1    6.0
#3  Rat     0    1.5
#4  Rat     1    4.5

df['Name'] = df.Name + 'T' + df.Time.astype('str')
df.drop(columns='Time', inplace=True)
0 голосов
/ 26 ноября 2018

Что именно вы хотите сделать?Просто добавьте 1/0 к вашему столбцу имени?

df = pd.DataFrame({'Value':[1,2,3,4,5,6,7],'Time':[0,0,0,1,1,1,1],
                   'Name':['Rat','Rat','Dog','Rat','Rat','Dog','Cat']})

df['new_name'] = df['Name'] + 'T' + df['Time'].astype('str')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...