微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-熊猫:groupby,并创建一个新的列,将聚合应用于两列

我在将agg应用于groupby熊猫数据框时遇到困难.

我有一个像这样的数据框df:

order_id    distance_theo    bird_distance 
      10              100               80
      10               80               80
      10               70               80
      11               90               70
      11               70               70
      11               60               70
      12              200              180
      12              150              180
      12              100              180
      12               60              180

我想对order_id进行分组,并通过将每个组中第一行的distance_theo除以每个组中第一行(或任意行,因为在一个组中只有bird_distance的一个值)来使新的行变成乌鸦.

order_id    distance_theo    bird_distance    crow
      10              100               80    1.25
      10               80               80    1.25
      10               70               80    1.25
      11               90               70    1.29
      11               70               70    1.29
      11               60               70    1.29
      12              200              180    1.11
      12              150              180    1.11
      12              100              180    1.11
      12               60              180    1.11

我的尝试:
df.groupby(‘order_id’).agg({‘crow’,lambda x:x.distance_theo.head(1)/ x.bird_distance.head(1)})

但是我得到一个错误

'Series' object has no attribute 'distance_theo'

我该如何解决?感谢您的任何建议!

解决方法:

首先使用groupby:

s = df.groupby('order_id').transform('first')
df.assign(crow=s.distance_theo.div(s.bird_distance))

   order_id  distance_theo  bird_distance      crow
0        10            100             80  1.250000
1        10             80             80  1.250000
2        10             70             80  1.250000
3        11             90             70  1.285714
4        11             70             70  1.285714
5        11             60             70  1.285714
6        12            200            180  1.111111
7        12            150            180  1.111111
8        12            100            180  1.111111
9        12             60            180  1.111111

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐