apply () метод в Pandas - PullRequest
       19

apply () метод в Pandas

0 голосов
/ 07 января 2020

Кто-нибудь здесь знает, что на самом деле делают эти коды ниже? Я запутался, что они дают другой результат для 'data1'.

Вот первый код:

def norm_by_data2(x):
    # x is a DataFrame of group values
    x['data1'] /= x['data2'].sum()
    return x

print(df, "\n")
print(df.groupby('key').apply(norm_by_data2), "\n")

Вот второй код:

pd.Series(df['data1'] / df['data2'].sum(), name='data1')

Вывод первого кода:

# How the DataFrame looks like
  key  data1  data2
0   A      0      5
1   B      1      0
2   C      2      3
3   A      3      3
4   B      4      7
5   C      5      9 

  key     data1  data2
0   A  0.000000      5
1   B  0.142857      0
2   C  0.166667      3
3   A  0.375000      3
4   B  0.571429      7
5   C  0.416667      9 

Вывод второго кода:

0    0.000000
1    0.037037
2    0.074074
3    0.111111
4    0.148148
5    0.185185
Name: data1, dtype: float64

1 Ответ

0 голосов
/ 07 января 2020

Первая версия работает с группами, поэтому она рассчитывает sum() для элементов в группах

x['data2'].sum() # x is a DataFrame of group values

Элементы в группе A используют сумму 8 (5 + 3)
Элементы в группе B использовать сумму 7 (0 + 7)
элементы в группе C использовать сумму 12 (3 + 9)

A 0/8  = 0.000000
B 1/7  = 0.142857 
C 2/12 = 0.166667 
A 3/8  = 0.375000
B 4/7  = 0.571429
C 5/12 = 0.416667

Вторая версия расчета sum() для всех элементов 27 (5 + 0 + 3 + 3 + 7 + 9)

A 0/27 = 0.000000
B 1/27 = 0.037037
C 2/27 = 0.074074
A 3/27 = 0.111111
B 4/27 = 0.148148
C 5/27 = 0.185185

Если вы используете print(x['data2'].sum()), то вы должны увидеть это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...