Новые колонки Python от мультигрупп - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть упрощенный фрейм данных, скажем:

df = pd.DataFrame({'Letter': ['A', 'B', 'A', 'B','A','B','A','B'], 'T/F': [True, True, False, False,True,False,True,False], 'Number':[5, 6, 7, 8, 9,10,11,12]})

У меня есть другой df2, у которого уже есть столбцы для (isAB или isTF). Я хочу сделать из моих новых столбцов что-то вроде df2.loc [:, 'A_True] со средним числом для A и True. Если я сделаю следующее:

df.groupby(['Letter','T/F'])['Number'].mean()[1::2]

Это выводит

Letter  T/F 
A       True    8.333333
B       True    6.000000
Name: Number, dtype: float64

Я хочу, чтобы у моего df2 был столбец, который является только 8.33333, 6. Требуется ли слияние? Я пытаюсь сэкономить время вместо того, чтобы

 for name,group in df.groupby('Letter'):
     df2.loc[df['Letter']==A,'A_True'] = group.loc[group['T/F'==True],'Number'].mean()

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Мы можем использовать DataFrame.unstack:

new_df=df.groupby(['Letter','T/F'],sort=False).Number.mean().unstack()
print(new_df)

T/F        True   False
Letter                 
A       8.333333    7.0
B       6.000000   10.0

new_df[True]

Letter
A    8.333333
B    6.000000
Name: True, dtype: float64

Редактировать

new_df=df.groupby(['Letter','T/F'],sort=False).Number.mean().unstack().reset_index()
print(new_df)

T/F Letter      True  False
0        A  8.333333    7.0
1        B  6.000000   10.0
1 голос
/ 07 ноября 2019

Вы можете фильтровать до

df.loc[df['T/F']].groupby('Letter')['Number'].mean()
Out[93]: 
Letter
A    8.333333
B    6.000000
Name: Number, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...