使用 Pandas,按索引进行分组,并对列应用最大值。

4
我可以帮您进行翻译。以下是您需要翻译的内容:

我正在尝试按3个元素对数据框进行分组,并希望从组中获取具有最高列值的行,但是 max 方法适用于所有列。 我该如何实现这一点?

我的做法:

将DataFrame按照想要分组的3个元素进行分组,然后使用apply方法应用函数,函数中根据需要选择特定列进行比较并返回最大行。
In [69]: fr
Out[69]:
             ping  delta
0   1516190798773    161
1   1516191845372    143
2   1516192904988    144

3   1516193952748    295
4   1516195008033    233
5   1516196049407    252

In [70]: fr.groupby(fr.index / 3).max()
Out[70]:
            ping  delta
0  1516192904988    161
1  1516196049407    295

Result I want to get:

            ping  delta
0  1516190798773    161
1  1516193952748    295
1个回答

4

如果要获取 ping 列中的第一个值和 delta 列中的最大值:

df = fr.groupby(fr.index // 3).agg({'delta':'max','ping':'first'})
print (df)
            ping  delta
0  1516190798773    161
1  1516193952748    295

如果想要在delta中找到最大值以及所有相应的行:

df = fr.loc[fr.groupby(fr.index // 3)['delta'].idxmax()]
print (df)
            ping  delta
0  1516190798773    161
3  1516193952748    295

更好的区别示例:
print (fr)
            ping  delta
0  1516190798773    161
1  1516191845372    143
2  1516192904988    144
3  1516193952748    233 <-swapped values 233
4  1516195008033    295 <-swapped values 295
5  1516196049407    252

df = fr.groupby(fr.index // 3).agg({'delta':'max','ping':'first'})
print (df)
            ping  delta
0  1516190798773    161
1  1516193952748    295

df = fr.loc[fr.groupby(fr.index // 3)['delta'].idxmax()]
print (df)
            ping  delta
0  1516190798773    161
4  1516195008033    295

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接