DataFrame.apply与GroupBy.apply的用法

DataFrame.apply的用法

DataFrame.apply操作的对象是DataFrame的一行或者一列,通过axis来指定行或者列,最终返回的类型取决于apply函数操作的结果。

对行进列操作

添加新列

df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3, 3], 'B': np.arange(8), 'C': [4, 1, 2, 1, 6, 3, 9, 0]})
print(df)
f = lambda x: x['A'] + x['B'] + x['C']
df['D'] = df.apply(f, axis=1)
print(df)

输出结果

   A  B  C
0  1  0  4
1  1  1  1
2  1  2  2
3  1  3  1
4  2  4  6
5  2  5  3
6  3  6  9
7  3  7  0

   A  B  C   D
0  1  0  4   5
1  1  1  1   3
2  1  2  2   5
3  1  3  1   5
4  2  4  6  12
5  2  5  3  10
6  3  6  9  18
7  3  7  0  10

同时添加两列

df = pd.DataFrame({'A': 'a a b'.split(), 'B': [1, 2, 3], 'C': [4, 6, 5]})
print(df)
f = lambda x: pd.Series([x.B + x.C, x.C - x.B], index=['D', 'F'])
df[['D', 'F']] = df.apply(f, axis=1)
print(df)

输出结果

   A  B  C
0  a  1  4
1  a  2  6
2  b  3  5

   A  B  C  D  F
0  a  1  4  5  3
1  a  2  6  8  4
2  b  3  5  8  2
对列进行操作

统计列的和

df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3, 3], 'B': np.arange(8), 'C': [4, 1, 2, 1, 6, 3, 9, 0]})
print(df)
df = df.apply(np.sum, axis=0)
print(df)

输出结果

   A  B  C
0  1  0  4
1  1  1  1
2  1  2  2
3  1  3  1
4  2  4  6
5  2  5  3
6  3  6  9
7  3  7  0

A    14
B    28
C    26

GroupBy.apply的用法

GroupBy.apply是将一个(已经分过组的)dataframe作为输入,对每个group进行操作后,将结果整合为一个dataframe或者series或者标量返回。

对元素进行操作

求每组元素占每组列元素之和的比值

df = pd.DataFrame({'A': 'a a b'.split(), 'B': [1, 2, 3], 'C': [4, 6, 5]})
print(df)
g = df.groupby('A')
g = g.apply(lambda x: x / x.sum())
print(g)

返回的是DataFrame对象,输出结果

   A  B  C
0  a  1  4
1  a  2  6
2  b  3  5

          B    C
0  0.333333  0.4
1  0.666667  0.6
2  1.000000  1.0
对每组各列进行操作

每组每列元素最大值减最小值

df = pd.DataFrame({'A': 'a a b'.split(), 'B': [1, 2, 3], 'C': [4, 6, 5]})
print(df)
g = df.groupby('A')
g = g.apply(lambda x: x.max() - x.min())
print(g)

返回的是DataFrame对象,输出结果

   A  B  C
0  a  1  4
1  a  2  6
2  b  3  5

   B  C
A      
a  1  2
b  0  0
对每组指定列进行操作

每组某列元素最大值减某列元素最小值

df = pd.DataFrame({'A': 'a a b'.split(), 'B': [1, 2, 3], 'C': [4, 6, 5]})
print(df)
g = df.groupby('A')
g = g.apply(lambda x: x.C.max() - x.B.min())
print(g)

返回的是Series对象,输出结果

   A  B  C
0  a  1  4
1  a  2  6
2  b  3  5

A
a    5
b    2
  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值