python - Pandas 中的 apply() 方法
问题描述
这里的任何人都知道下面这些代码实际上做了什么?我很困惑他们在“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
解决方案
第一个版本适用于组,因此它计算sum()
组中的元素
x['data2'].sum() # x is a DataFrame of group values
组内元素A
使用 sum 8
(5+3)
组内元素B
使用 sum 7
(0+7)
组内元素C
使用 sum 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())
,那么你应该看到它。
推荐阅读
- c# - 为列表元素添加引号
- debugging - 调试 UWP 应用程序时无法识别符号文件
- c++ - 无法从 dll 调用函数
- maven - Dropwizard,测试一个胖罐子
- wpf - ListView 无法与 ObservableCollection 一起正常工作
- linux - 删除 | 来自 Linux 命令
- .htaccess - 如果文件不存在,.htaccess 如何将文件重定向到另一个目录
- javascript - 如何在另一个矩形内绘制一个矩形
- python - excel数据未使用python上传到mysql工作台
- wagtail - 如何按上下文模型 wagtail 上定义的日期排序