"之间的不同结果适用于groupbys"和#"对于"环

时间:2016-09-29 04:17:36

标签: python for-loop apply

Python新手,我正在关注" Python数据科学手册"的Chatper 4中的示例。 groupby('列')。apply(defined_function)结果似乎与'相同'不同。迭代行时使用的算术。我想了解原因。

数据框由以下人员创建:

import pandas as pd
import numpy as np

rng = np.random.RandomState(0)
df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'data1': range(6),
                   'data2': rng.randint(0, 10, 6)},
                   columns = ['key', 'data1', 'data2'])
制造

    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

定义一个函数来规范化列< data1'通过将其值除以“数据2”和“数据2”列中值的总和。该功能以groupby为基础应用:

def norm_by_data2(x):
    x['data1'] /= x['data2'].sum()
    return x

df.groupby('key').apply(norm_by_data2)
制造

    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

我尝试通过迭代行来生成相同的逻辑:

d2_sum = df.data2.sum()

for x in df.index:
    print(df.data1.loc[x]/d2_sum)

我的示例返回:

0.0
0.037037037037
0.0740740740741
0.111111111111
0.148148148148
0.185185185185

差异的原因是什么?

0 个答案:

没有答案