查询Pandas datafram

2024-10-06 10:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据:

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作为,hm,value,带有附加列PrimaryName。 我的任务是,通过只查看每个PrimaryName的最大值的两个条目,来确定两个最大的PrimaryName

例如,对于PN0,两个最大值是5和6,对于PN1是6和7,对于{}是2和3。这意味着最大的PrimaryNamePN0,得分为11,而{}的得分为13。
理想的结果只是PrimaryNames=>;['PN1', 'PN0']

像一个很容易回答问题的人:

^{pr2}$

但现在我不得不用Python,特别是pandas来重复。在

到目前为止,我只想到了一个问题的以下部分:

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

我怀疑,要像我在这条C#行g.OrderByDescending(e => e.Value).Take(2).Sum(e => e.Value)中所做的那样执行计算,我必须用一个临时列定义一个新的dataframe,但我不确定具体如何定义。在

有人能帮我吗?在


实际上这个问题还有一点。这项任务是熊猫课程的一部分,而且,从groupby是下周的主题这一事实来看,我可能走错了路,或者至少我错过了一些简单明了的东西。在


Tags: 数据id定义valuegroupbypn1primarynamesn1
2条回答

你可以的

In [5181]: (df.groupby(['PrimaryName'])['Value']
              .nlargest(2)
              .sum(level=0)
              .nlargest(2)
              .index.tolist())
Out[5181]: ['PN1', 'PN0']

细节

^{pr2}$

使用双^{}-首先获取2顶部值,然后sum它们,然后再使用另一个前2个索引值:

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

详细信息:

^{pr2}$

或者:

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

相关问题 更多 >