Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对数据帧的查询_C#_Python_Pandas_Python 3.5 - Fatal编程技术网

C# 对数据帧的查询

C# 对数据帧的查询,c#,python,pandas,python-3.5,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

我有以下数据:

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
as,hm,value,还有一列
PrimaryName
。 我的任务是,通过只查看每个
PrimaryName
值最大的两个条目,确定两个最大的
PrimaryName
s

例如,对于
PN0
两个最大值是5和6,对于
PN1
是6和7,对于
PN2
是2和3。这意味着最大的
PrimaryName
s是
PN0
,得分为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,特别是熊猫来重复它

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

df.groupby('PrimaryName')[['PrimaryName', 'Value']]
我怀疑,要像我在这C行中那样执行计算,我必须定义一个带有临时列的新数据帧,但我不确定具体是如何定义的

谁能帮我一下吗


实际上,这个问题还有一点。这项任务是关于熊猫的课程的一部分,根据
groupby
是下一周的主题这一事实判断,我可能走错了路,或者至少我可能遗漏了一些简单而明显的东西。

使用double-first获取
2
顶级值,然后使用
sum
首先计算它们,然后再计算另一个前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
或:

你可以

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

细节

In [5185]: df.groupby(['PrimaryName'])['Value'].nlargest(2)
Out[5185]:
PrimaryName
PN0          2    6
             1    5
PN1          5    7
             4    6
PN2          8    3
             7    2
Name: Value, dtype: int64

In [5186]: df.groupby(['PrimaryName'])['Value'].nlargest(2).sum(level=0)
Out[5186]:
PrimaryName
PN0    11
PN1    13
PN2     5
Name: Value, dtype: int64

In [5187]: df.groupby(['PrimaryName'])['Value'].nlargest(2).sum(level=0).nlargest(2)
Out[5187]:
PrimaryName
PN1    13
PN0    11
Name: Value, dtype: int64

@事实上,我做到了:
['PN1','PN0']
好吧,谢谢你,Zero,谢谢你的详细解释!现在,多亏了你,我才能够更好地理解这些功能!干杯
In [5185]: df.groupby(['PrimaryName'])['Value'].nlargest(2)
Out[5185]:
PrimaryName
PN0          2    6
             1    5
PN1          5    7
             4    6
PN2          8    3
             7    2
Name: Value, dtype: int64

In [5186]: df.groupby(['PrimaryName'])['Value'].nlargest(2).sum(level=0)
Out[5186]:
PrimaryName
PN0    11
PN1    13
PN2     5
Name: Value, dtype: int64

In [5187]: df.groupby(['PrimaryName'])['Value'].nlargest(2).sum(level=0).nlargest(2)
Out[5187]:
PrimaryName
PN1    13
PN0    11
Name: Value, dtype: int64