[英]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.