python - pandas - 获取由另一列索引的特定列的最新值(获取由另一列索引的特定列的最大值)

标签 python pandas

我有以下数据框:

   obj_id   data_date   value
0  4        2011-11-01  59500    
1  2        2011-10-01  35200 
2  4        2010-07-31  24860   
3  1        2009-07-28  15860
4  2        2008-10-15  200200

我想获取此数据的子集,以便我只有每个 'obj_id 的最新(最大 'data_date')'value' '

我想出了一个解决方案,但感觉很脏。我想知道是否有人有更好的方法。我敢肯定我一定错过了一些通过 Pandas 来做到这一点的简单方法。

我的方法本质上是按如下方式进行分组、排序、检索和重组:

row_arr = []
for grp, grp_df in df.groupby('obj_id'):
    row_arr.append(dfg.sort('data_date', ascending = False)[:1].values[0])

df_new = DataFrame(row_arr, columns = ('obj_id', 'data_date', 'value'))

最佳答案

如果“obj_id”的数量非常多,您需要对整个数据帧进行排序,然后删除重复项以获取最后一个元素。

sorted = df.sort_index(by='data_date')
result = sorted.drop_duplicates('obj_id', keep='last').values

这应该会更快(抱歉我没有测试),因为你不必做自定义的 agg 函数,当有大量键时会很慢。您可能认为对整个数据帧进行排序会更糟糕,但在实践中,python 排序速度很快,而原生循环很慢。

关于python - pandas - 获取由另一列索引的特定列的最新值(获取由另一列索引的特定列的最大值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9850954/

相关文章:

python - 如何知道ui窗体中的哪个qwidget在pyqt中获得了焦点

python - 根据一个字典的结构(骨架)和另一个字典的相应值创建嵌套字典

python-3.x - 如何使用 pandas python 对特定列进行操作第 3 部分

python - 获取每行中特定元素的数量

python - 如何查看str包含bool数组的内容?

javascript - 有没有一种安全的方法可以将 React.js 与 Python Flask 后端一起用于多用户、受密码保护的站点

python - 当是布局子项时启用 PyGTK Eventbox 运动通知事件

python - 如何用特殊字符python替换字符串列表中的精确匹配?

c# - 如何在 Python 中生成 2 位整数的结构化列表?

Python:消除数据框中重复的小数