Вычислите среднее значение каждого столбца данных в панде на основе условия (т.е. усредненных значений) - PullRequest
0 голосов
/ 25 февраля 2019

Я не знаю, почему я так сильно борюсь с этим.Я пытаюсь сделать Excel эквивалент эквивалента среднего значения для кадра данных панд.

У меня есть следующее:

df = pd.DataFrame(rng.rand(1000, 7), columns=['1/31/2019', '2/28/2019', '3/31/2019', '4/30/2019', '5/31/2019', '6/30/2019', '7/31/2019'])

У меня также есть столбец:

df['Doc_Number'] = ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'A', 'D', 'G', 'G', 'D', 'G', 'B' ...]

Я хочу сделать Excel-эквивалент средних значений для Doc_Number для каждого столбцаиз df при сохранении структуры кадра данных.Таким образом, в каждом столбце я бы вычислил среднее значение, если бы df ['Doc_Number'] = ['A', 'B', 'C' ...], но я все равно сохранил бы 1000 строк и применил бырассчитать для каждого отдельного столбца ['31.01.2009', '28.02.2009', '31.03.2009' ...].

Для одного столбца я бы сделал что-то вроде:

df['AverageIfs'] = df.groupby('Doc_Number')['1/31/2019'].transform('np.mean')

Но как бы вы применили calc к каждому столбцу df?На самом деле, у меня есть еще много столбцов для применения калькуляции.

Я - полный любитель, так что спасибо, что согласились с моими вопросами.

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете удалить ['1/31/2019'] после группировки для обработки всех столбцов на новые DataFramme, изменить имена столбцов с помощью add_suffix и добавить к оригиналу с помощью join:

#simplify df for easy check output
np.random.seed(123)
df = pd.DataFrame(np.random.rand(14, 2), columns=['1/31/2019', '2/28/2019'])
df['Doc_Number'] = ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'A', 'D', 'G', 'G', 'D', 'G', 'B']

print (df)
    1/31/2019  2/28/2019 Doc_Number
0    0.696469   0.286139          A
1    0.226851   0.551315          B
2    0.719469   0.423106          C
3    0.980764   0.684830          B
4    0.480932   0.392118          C
5    0.343178   0.729050          B
6    0.438572   0.059678          A
7    0.398044   0.737995          A
8    0.182492   0.175452          D
9    0.531551   0.531828          G
10   0.634401   0.849432          G
11   0.724455   0.611024          D
12   0.722443   0.322959          G
13   0.361789   0.228263          B

df = df.join(df.groupby('Doc_Number').transform('mean').add_suffix('_mean'))
print (df)
    1/31/2019  2/28/2019 Doc_Number  1/31/2019_mean  2/28/2019_mean
0    0.696469   0.286139          A        0.511029        0.361271
1    0.226851   0.551315          B        0.478146        0.548364
2    0.719469   0.423106          C        0.600200        0.407612
3    0.980764   0.684830          B        0.478146        0.548364
4    0.480932   0.392118          C        0.600200        0.407612
5    0.343178   0.729050          B        0.478146        0.548364
6    0.438572   0.059678          A        0.511029        0.361271
7    0.398044   0.737995          A        0.511029        0.361271
8    0.182492   0.175452          D        0.453474        0.393238
9    0.531551   0.531828          G        0.629465        0.568073
10   0.634401   0.849432          G        0.629465        0.568073
11   0.724455   0.611024          D        0.453474        0.393238
12   0.722443   0.322959          G        0.629465        0.568073
13   0.361789   0.228263          B        0.478146        0.548364
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...