使用3列数据操作熊猫数据框

问题描述:

我有麻烦想出一种方法来完成我的任务。我有一个3列的数据框:length, reachcode, and year使用3列数据操作熊猫数据框

我的例子据帧:

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

我试图找到一个单一的一年内“reachcode”重复再总结“长度”为一年。

之后,我想比较不同年份的“长度”值和相同的'reachcode'并保持最小值。

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

我对大熊猫有一些经验,但这是一个比以前更复杂的任务。我真正的数据框大约有40,000行,因此找到一个自动化的方法来做到这一点非常有帮助。谢谢你的帮助。

这听起来像你需要一个双阶段groupby。首先GROUPBY yearreachcode并计算总和,重新索引,使您可以GROUPBY reachcode进一步采取length最小:

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

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

太谢谢你了!我最近使用了groupby,但从来没有意识到我可以像你展示给我的那样在一个双阶段中做到这一点。真的很感激它! – gball

只需运行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 
+0

太好了。转换函数非常有用。谢谢 – gball