Преобразовать значение строки, используя одинаковые размеры

1

У меня в настоящее время есть 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 и работать оттуда?

  • 0
    Можете ли вы объяснить, почему значение типа B не становится 7,5 и 7,5
  • 0
    Я только пытаюсь применить преобразование к показателю «Продажи».
Теги:
pandas
python-3.x

1 ответ

3
Лучший ответ

Если вам нужно сделать это только для значений '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

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

  • 0
    люблю это решение! единственная проблема, которую я имею, это то, что она берет среднее значение всех моих дат, где я хочу, чтобы оно составляло среднее значение только тогда, когда даты равны ... Знаете ли вы, как включить это?
  • 0
    Да, измените столбцы группировки так, чтобы это df[mask].groupby(['Account', 'Date']).Value.transform('mean')
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню