python - 对(删除的)重复行的值求和 Pandas DataFrame

标签 python pandas dataframe drop-duplicates

对于时间序列分析,我必须删除同一日期发生的实例。但是,保留一些“已删除”信息并将其添加到剩余的“重复”实例中。下面是我的数据集的一部分的简短示例。

z = pd.DataFrame({'lat':[49.125,49.125], 'lon':[-114.125 ,-114.125 ], 'time':[np.datetime64('2005-08-09'),np.datetime64('2005-08-09')], 'duration':[3,6],'size':[4,10]})

    lat     lon         time        duration    size
0   49.125  -114.125    2005-08-09  3           4
1   49.125  -114.125    2005-08-09  6           10

我想删除具有最低“持续时间”值的(重复)实例,但同时对“大小”变量求和。输出如下:

    lat     lon         time        duration    size
0   49.125  -114.125    2005-08-09  6           14

有谁知道我该如何解决这样的问题?此外,对于另一个变量,我想取这些值的平均值。但我确实认为这个过程类似于对值求和。

编辑:到目前为止我知道如何获得最高的持续时间值以继续使用:

z.sort_values(by='duration', ascending=False).drop_duplicates(subset=['lat', 'lon','time'], keep='last')

最佳答案

如果这些是数据框中的所有列,您可以在时间列上使用 groupby 并传入每列的聚合来获取结果。

更具体地说,您可以通过保持 max() 持续时间来删除具有最低“持续时间”的(重复)实例,并且保持相同通过在尺寸列上使用 sum() 对“尺寸”变量进行时间求和。

res = z.groupby('time').agg({'lat':'first',
                                           'lon':'first',
                                           'duration':'max',
                                           'size':'sum'}).  \
    reset_index()

res

        time     lat      lon  duration  size
0 2005-08-09  49.125 -114.125         6    14

唯一的区别是“时间”现在是您的第一列,您可以快速修复。

关于python - 对(删除的)重复行的值求和 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66888593/

相关文章:

python - 什么是 "twice HSV transformation"?

python - 无法按分位数选择 Pandas DataFrame

python - 如何计算 pandas Dataframe 中分类数据的子组?

python - 导入错误: No module named requests in 'pytest'

python - Dreamhost + Passenger + Django 故障排除

python - AttributeError: LinearRegression 对象没有属性 'coef_'

python - 有效地删除 Pandas 数据框中的行

python - 在 pandas 数据框中获取几年内工作日某个小时的平均值

python - 迭代数据框

r - 获取 data.frame 的 colclasses 的优雅方法