【问题标题】:Pandas: Syntax in Groupby熊猫:Groupby 中的语法
【发布时间】:2017-05-30 08:57:20
【问题描述】:

我有以下数据集:

id window Rank    member
1    2      2        0
1    3      2        0 
2    3      1        0 
2    2      1        0

我想让成员在 window==3 时等于 Rank。为此,我有以下命令:

df["member"]= df[df['window']==3]['Rank'][0]

但是,我想在 groupby 语句中对 id 进行分组。下面的命令返回错误。这可能是我在这里遗漏的一件简单的事情,但我无法解决如何在上述命令中使用 groupby。非常感谢任何帮助。

df["member"]= df.groupby("id")[df[df['window']==3]['Rank'][0]]

【问题讨论】:

  • 返回什么错误?你的预期输出是什么,我无法理解你想要做什么。

标签: python pandas syntax pandas-groupby


【解决方案1】:

您可以使用pandas.DataFrame.where 来实现这一点-

df = pd.DataFrame({'id':[1,1,2,2],'window':[2,3,3,2],'Rank':[2,2,1,1],'member':[0,0,0,0]})
=>
    Rank  id  member  window
0     2   1       0       2
1     2   1       0       3
2     1   2       0       3
3     1   2       0       2

df['member'] = df['Rank'].where(df['window']==3, df['member'])

print(df)
=>
   Rank  id  member  window
0     2   1       0       2
1     2   1       2       3
2     1   2       1       3
3     1   2       0       2

【讨论】:

    【解决方案2】:

    您可以使用numpy.whereDataFrame.loc

    df['member'] = np.where(df['window']==3, df['Rank'], df['member'])
    print (df)
       id  window  Rank  member
    0   1       2     2       0
    1   1       3     2       2
    2   2       3     1       1
    3   2       2     1       0
    

    df.loc[df['window']==3, 'member'] = df['Rank']
    print (df)
       id  window  Rank  member
    0   1       2     2       0
    1   1       3     2       2
    2   2       3     1       1
    3   2       2     1       0
    

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 1970-01-01
      • 2022-07-05
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      相关资源
      最近更新 更多