熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]

Posted

技术标签:

【中文标题】熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]【英文标题】:pandas dataframe: extract data with specific crtieria/conditions minimum in a column fixing other columns [duplicate] 【发布时间】:2022-01-22 20:57:40 【问题描述】:

首先非常感谢您的帮助。 我有一个表,我用 pandas 作为 df 导入。对于每个唯一的 foo&bar,我想获得一个新的 df,其中最小的 zoo 和相应的 qux。我试图简化我的数据框,但实际上我有数百个 qux 和 foo 以及几十个 bar。

我的输入表:

foo bar zoo qux
aaa HB1 9.75 lab1
aaa HB1 4.87 lab2
aaa HB1 3.05 lab3
aaa TS3 8.51 lab1
aaa TS3 2.58 lab2
aaa TS3 2.48 lab3
bbb HB1 9.03 lab1
bbb HB1 6.11 lab2
bbb HB1 7.66 lab3
bbb TS3 3.57 lab1
bbb TS3 4.25 lab2
bbb TS3 1.63 lab3

我的预期结果

foo bar zoo qux
aaa HB1 3.05 lab3
aaa TS3 2.48 lab3
bbb HB1 6.11 lab2
bbb TS3 1.63 lab3

我尝试使用 groupby 或 pivot_table,我获得了每个 bar 和每个 foo 的 min zoo 但我没有获得相应的 qux 并且 df 被完全重塑,看起来不像我的第一个格式。我有点失落。

非常感谢您的帮助。

【问题讨论】:

试试这个:df[df['zoo'].isin(df.groupby(['foo','bar'])['zoo'].min().values)] 【参考方案1】:

通过groupby获取最小值的索引位置,索引原始df获取行数:

df.loc[df.groupby(['foo', 'bar']).zoo.idxmin()]
 
    foo  bar   zoo   qux
2   aaa  HB1  3.05  lab3
5   aaa  TS3  2.48  lab3
7   bbb  HB1  6.11  lab2
11  bbb  TS3  1.63  lab3

【讨论】:

太棒了……!!!多谢。我忽略了 idxmin()。嗯,我今天学到了一些新东西。谢谢 Sammywemmy!【参考方案2】:

您可以按descending 的顺序对数据框中的值进行排序并使用groupby.tail(1)

df.sort_values(by=['foo','bar','zoo','qux'],ascending=False).groupby(['foo','bar']).tail(1)

    foo  bar   zoo   qux
2   aaa  HB1  3.05  lab3
5   aaa  TS3  2.48  lab3
8   bbb  HB1  7.66  lab3
11  bbb  TS3  1.63  lab3

【讨论】:

太棒了..!很好的解决方案,非常感谢 sophocles !

以上是关于熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框列中查找特定文本

具有固定增量的列的 R 回归

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

遍历熊猫数据框中的列

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?

从遵循特定模式的列中提取字符串