Pandas-如何分组,计算第一行和最后一行之间的差,计算最大值,并在原始帧中选择相应的组



我有一个Pandas数据帧,它有两列我感兴趣:一个分类标签和一个时间戳。据推测,我试图做的事情也适用于有序的数字数据。数据帧已经按时间戳按升序进行了排序。我想找出哪个标签跨越最长的时间窗口,并只选择原始数据帧中与之相关的值。

我已经尝试过按标签对df进行分组,计算差异并成功选择最大值(最长时间窗口(,但我很难找到一个表达式来使用这些信息选择原始df中的相应值。

考虑这个带有数值的例子:

d = {'cat': ['A','A','A','A','A','A','B','B','B','B','C','C','C','C','C','C','C'],
'val': [1,3,5,6,8,9,0,5,10,20,4,5,6,7,8,9,10]}
df = pd.DataFrame(data = d)

在这里,我期望与df.loc[df.cat == 'B']等价的东西,因为B具有所有类别中的最大差异。

df.groupby('cat').val.apply(lambda x: x.max() - x.min()).max()

给了我正确的区别,但我不知道如何使用它在原始df中选择正确的类别。

您可以使用idxmax来获取组内产生最大峰间值的类别(np.ptp为最大值减去最小值(。然后你可以按照你说的用locquery:进行索引

>>> max_cat = df.groupby("cat").val.apply(np.ptp).idxmax()
>>> max_cat
"B"
>>> df.query("cat == @max_cat")  # or df.loc[df.cat == max_cat]
cat  val
6   B    0
7   B    5
8   B   10
9   B   20

最新更新