繁体   English   中英

Python Pandas:每组最小最大值的比较

[英]Python Pandas: Comparison of Min Max Values Per Group

假设我有一些这样的数据:

              timestamp
patient_id
99          10
99          100
3014        20
3014        200

每位大熊猫中的每一个id如何准确地找到最大,最小和平均的时间戳范围?

我正在寻找的是能够报告此:

shortest range = 90 (100 - 10)
longest range = 180 (200 - 20)
average range = (180 + 90) / 2 = 135

设置

创建虚拟DataFrame:

import pandas as pd

data = '''99          10
99          100
3014        20
3014        200'''.split('\n')

使用两个嵌套列表推导,拆分行,然后拆分列,并将所有元素转换为int 然后导入到DataFrame

data = [[int(n) for n in item.split()] for item in data]

DF = pd.DataFrame(data, columns=['pid', 'timestamp'])

作为学习练习,请遍历每个组(假定每个pid有任意数量的时间戳,而不仅仅是两个)。 这不是解决方案,而只是演示groupby工作方式:

for pid, grp in DF.groupby('pid'):
    print(pid, grp.timestamp.min(), grp.timestamp.max())

# Prints:
# (99, 10, 100)
# (3014, 20, 200)

解决方案

该解决方案更有效:获取最小值和最大值的向量,提取范围,然后找到范围的最小值,最大值和平均值。 Pandas的优势在于,它将作为一个整体在DataFrame中的任何列上进行操作,从而使对数组的计算非常简单,如下所示:

mins = DF.groupby('pid').timestamp.min()
maxs = DF.groupby('pid').timestamp.max()
ranges = maxs - mins

shortest_range = ranges.min()
longest_range = ranges.max()
average_range = ranges.mean()

print(shortest_range, longest_range, average_range)

# (90, 180, 135.0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM