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

时间:2016-08-22 17:22:44

标签: python pandas

我无法想出一种完成任务的方法。我有一个包含3列的数据框:length, reachcode, and year

我的示例数据框:

year  reachcode  length
1988  1000       1.2
1988  1000       2.0
1990  1000       0.3
1993  1000       0.5

我试图在一年内找到'覆盖码'重复,然后总计那一年的“长度”。

之后我想比较相加的'长度'值与不同年份的相同'到达码'并保持最小值。

因此,在示例数据框中,长度1.2和2.0将对1998年和reachcode = 1000进行求和,然后将该值(3.2)与1990和1993进行比较,值为0.3并保留到达代码在新名单中。

我对Pandas有一些经验,但这是一项比我以前不得不处理的更复杂的任务。我的实际数据帧大约有40,000行,因此找到一种自动执行此操作的方法非常有用。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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

df.groupby(['year', 'reachcode']).sum().reset_index().groupby('reachcode')['length'].min()

# reachcode
#      1000    0.3
# Name: length, dtype: float64

答案 1 :(得分:2)

只需运行groupby聚合:

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