首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用3列数据操作pandas数据帧

使用3列数据操作pandas数据帧
EN

Stack Overflow用户
提问于 2016-08-23 01:22:44
回答 2查看 61关注 0票数 1

我想不出一个办法来完成我的任务。我有一个包含3列的数据帧:length, reachcode, and year

我的示例dataframe:

代码语言:javascript
复制
year  reachcode  length
1988  1000       1.2
1988  1000       2.0
1990  1000       0.3
1993  1000       0.5

我试图找到一个年份内的“reachcode”重复项,然后对该年的“长度”求和。

之后,我想要比较不同年份的相同“reachcode”和“length”值的总和,并保留最小的值。

因此,在示例数据帧中,将1998年和reachcode = 1000的长度1.2和2.0相加,然后将该值(3.2)与1990和1993进行比较,并将值0.3和reachcode保留在新列表中。

我有一些使用Pandas的经验,但这是一项比我以前必须处理的更复杂的任务。我的真实数据帧大约有40,000行,因此找到一种自动化的方法来完成这项工作将非常有帮助。谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2016-08-23 01:45:47

听起来你需要一个双阶段的groupby。首先按yearreachcode分组,并计算和,重置索引,以便可以进一步按reachcode分组,取length的最小值

代码语言:javascript
复制
df.groupby(['year', 'reachcode']).sum().reset_index().groupby('reachcode')['length'].min()

# reachcode
#      1000    0.3
# Name: length, dtype: float64
票数 2
EN

Stack Overflow用户

发布于 2016-08-23 01:47:18

只需运行groupby聚合:

代码语言:javascript
复制
df['lengthsum'] = df.groupby(['year', 'reachcode'])['length'].transform(sum)

df['lengthmin'] = df.groupby(['reachcode'])['lengthsum'].transform(min)

#    year  reachcode  length  lengthsum  lengthmin
# 0  1988       1000     1.2        3.2        0.3
# 1  1988       1000     2.0        3.2        0.3
# 2  1990       1000     0.3        0.3        0.3
# 3  1993       1000     0.5        0.5        0.3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39085326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档