У меня в настоящее время есть dataframe, который выглядит так:
Account Date Region Type Measure Value
Bob 31-Jan East A Sales 7
Bob 31-Jan West A Sales 8
Bob 31-Jan East B Expense 5
Bob 31-Jan West B Expense 10
Единственное отличие заключается в том, что мой фактический фреймворк имеет несколько разных полей для измерений "учетная запись", "дата" и "тип".
Моя цель здесь состоит в том, чтобы изменить ценность учетных записей только Боба как разделение 50/50 между регионами
например, это будет выглядеть так:
Account Date Region Type Measure Value
Bob 31-Jan East A Sales 7.5
Bob 31-Jan West A Sales 7.5
Bob 31-Jan East B Expense 5
Bob 31-Jan West B Expense 10
Я пробовал фильтровать свой df на Bob и продажи, чтобы начать:
df = df[df['Account'] == 'Bob']
df = df[df['Measure'] == 'Sales']
Затем я делаю все регионы одинаковыми:
df['Region'] = 'East and West'
Когда-то здесь я пробовал несколько функций groupby, но я не могу заставить их возвращать правильные значения.
Должен ли я попытаться перенести мой df и работать оттуда?
Если вам нужно сделать это только для значений 'sales'
для одного человека, то используйте булевское индексирование и mean
mask = (df.Measure == 'Sales') & (df.Account == 'Bob')
df.loc[mask, 'Value'] = df.loc[mask, 'Value'].mean()
Однако, если вы хотите сделать это для мер 'sales'
для каждой учетной записи, вы должны использовать transform
groupby
+.
mask = (df.Measure == 'Sales')
df.loc[mask, 'Value'] = df[mask].groupby('Account').Value.transform('mean')
Выход:
Account Date Region Type Measure Value
0 Bob 31-Jan East A Sales 7.5
1 Bob 31-Jan West A Sales 7.5
2 Bob 31-Jan East B Expense 5.0
3 Bob 31-Jan West B Expense 10.0
В последнем случае вы можете добавить больше столбцов в столбцы группировки, например, если вы хотите рассчитать средние продажи для каждой учетной записи на каждую дату каждого типа.
df[mask].groupby(['Account', 'Date']).Value.transform('mean')