gpt4 book ai didi

c# - 查询 Pandas 数据框

转载 作者:行者123 更新时间:2023-11-30 21:37:47 24 4
gpt4 key购买 nike

我有以下数据:

Id | PrimaryName | SecondaryName | Value
---+-------------+---------------+-------
0 | PN0 | SN0 | 3
1 | PN0 | SN1 | 5
2 | PN0 | SN2 | 6
3 | PN1 | SN3 | 5
4 | PN1 | SN4 | 6
5 | PN1 | SN5 | 7
6 | PN2 | SN6 | 1
7 | PN2 | SN7 | 2
8 | PN2 | SN8 | 3

实际上,它类似于一个键值对,以 SecondaryName 为键,以 Value 为,嗯,值,附加列 PrimaryName。我的任务是,通过仅查看每个 PrimaryName 具有最大值的两个条目,确定两个最大的 PrimaryName

例如,对于PN0,两个最大值是5和6,对于PN1,是6和7,对于PN2,是2和3 . 这意味着最大的 PrimaryName 是得分为 11 的 PN0 和得分为 13 的 PN1
理想的结果只是 PrimaryName 的有序列表 => ['PN1', 'PN0']

作为一个相当精通 C# 的人,这看起来是一项非常简单的任务,可以通过以下查询解决:

var result = table.GroupBy(r => r.PrimaryName)
.Select(g => new
{
PrimaryName = g.Key,
Value = g.OrderByDescending(e => e.Value).Take(2).Sum(e => e.Value)
})
.OrderByDescending(e => e.Value)
.Take(2)
.Select(e => e.PrimaryName)
.ToList();

但现在我必须在 Python 中重复它,特别是 pandas。

到目前为止,我只想到了查询的以下部分:

df.groupby('PrimaryName')[['PrimaryName', 'Value']]

我怀疑要像我在 C# 行中那样执行计算 g.OrderByDescending(e => e.Value).Take(2).Sum(e => e.Value) 我将不得不定义一个带有临时列的新数据框,但我不确定具体如何定义。

有人可以帮我吗?


这个问题实际上还有更多内容。这个任务是 pandas 类(class)的一部分,并且根据 groupby 是下周的主题来判断,我可能走错了路,或者至少我可能错过了一些简单的东西很明显。

最佳答案

使用双 nlargest - 首先获取 2 最高值,然后先对它们进行求和,然后再获得另外前 2 个索引值:

L = df.groupby('PrimaryName')['Value']
.apply(lambda x: x.nlargest(2).sum())
.nlargest(2)
.index
.tolist()
print (L)
['PN1', 'PN0']

详细信息:

print (df.groupby('PrimaryName')['Value'].apply(lambda x: x.nlargest(2).sum()))
PrimaryName
PN0 11
PN1 13
PN2 5
Name: Value, dtype: int64

或者:

L = df.sort_values('Value', ascending=False)
.groupby('PrimaryName')['Value']
.apply(lambda x: x.head(2).sum())
.nlargest(2)
.index
.tolist()

关于c# - 查询 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46874324/

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