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
差异的原因是什么?