c# - 查询 Pandas 数据框

标签 c# python pandas python-3.5

我有以下数据:

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作为 key 和 Value as、hm、值,带有附加列 PrimaryName 。 我的任务是,仅查看每个 PrimaryName 中值最大的两个条目。 ,确定两个最大的PrimaryName s。

例如,对于 PN0两个最大值是 5 和 6,对于 PN1是 6 和 7,对于 PN2是 2 和 3。这意味着最大的 PrimaryNamePN0得分为 11,且 PN1得分为13。
理想的结果只是 PrimaryName 的有序列表s => ['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/

相关文章:

c# - 如何在 bunit Blazor 组件单元测试中注入(inject) NavigationManager

c# - XAML Int 到 bool 转换器

python - 有没有办法将数字添加到列表中元组的第一部分?

python - 为什么传递元组会导致 pandas 出现关键错误?

python - 加快将大 excel 文件导入 pandas 数据框的速度

python - 仅当所有列都包含 0 时才删除该行

c# - Windows 服务还是控制台应用程序?

c# - Azure存储: File Metadata

python - 正确关闭守护线程

python - 尝试将预测带回到数据帧中的相应行