gpt4 book ai didi

Python通过大于或等于每个子组中值的列值查找数据框中的记录

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:08 25 4
gpt4 key购买 nike

假设我有一个数据框,可以通过以下方式启动:

df = pd.DataFrame({'group1': ['1','2','3','4','5','6'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
df = df.set_index(['group1', 'group2'])

我想要子集 df通过value2列,其值大于或等于索引 group2 指定的每个子组的中位数。在此示例中,group1 行在['2','4','5','6']应该留在结果中。有人可以帮忙吗?

最佳答案

这应该有效:

df['value2'] = df['value2'].groupby(level='group2').transform(lambda x: np.where(x>=np.median(x), x, np.NaN))
df = df.dropna()

它的作用是获取value2列,并按group2将其分成组。对于每个组,它会找到中位数,然后用 NaN 替换低于中位数的值。然后,它将其放回 value2 列,然后删除所有具有 NaN 值的行。

作为替代方案,这里有一个不太清晰的单行:

df = df.groupby(level='group2').transform(lambda x: x if x.name != 'group2' else np.where(x>=np.median(x), x, np.NaN)).dropna()

它的作用大致相同,只是它在两列上运行,但不对 group1 列执行任何操作。

请注意,在第二种方法中,如果您愿意,您可以存储到第二个变量,例如 df2 ,而无需更改原始 df 。您可以使用第一种方法来做到这一点,但这需要另一行来制作副本。对于这种情况,这个版本要简单得多。

关于Python通过大于或等于每个子组中值的列值查找数据框中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com