【问题标题】:Pandas: Count Distinct Combinations of two columns and add to Same Dataframe熊猫:计算两列的不同组合并添加到相同的数据框
【发布时间】:2017-09-12 12:55:03
【问题描述】:

在将两列的唯一组合添加到 pandas 中的同一数据框时需要帮助。 我想要那个“nos”列。

Input:
id  acct_nos name
1   1a       one
1   1a       two
2   2b       three
3   3a       four
3   3b       five
3   3c       six
3   3d       seven

这是我想要的输出:

Output:
id  acct_nos    nos name
1   1a          1   one 
1   1a          1   two
2   2b          1   three
3   3a          4   four
3   3b          4   five
3   3c          4   six
3   3d          4   seven

在上面的例子中 Id=1 只有 1 acct_nos-1a 所以 nos 必须有一个值 1。 Id=3 只有 4 acct_nos-3a 到 3d,所以 nos 的值必须是 4。

不确定如何将其放入 Python Pandas。我能弄清楚的 SQL 查询。

谢谢

【问题讨论】:

    标签: python pandas count size aggregation


    【解决方案1】:

    您可以使用groupby.transform 和nunique() 函数来计算每个id 的唯一元素数:

    df['nos'] = df.groupby("id")['acct_nos'].transform("nunique")
    df
    

    【讨论】:

      【解决方案2】:

      选项 1

      df.assign(nos=df.id.map(df.drop_duplicates(['id', 'acct_nos']).id.value_counts()))
      

      选项 2
      使用Counter

      from collections import Counter
      
      tups = pd.unique(
          zip(df.id.values.tolist(), df.acct_nos.values.tolist())
      ).tolist()
      df.assign(nos=df.id.map(Counter([tup[0] for tup in tups])))
      
         id acct_nos   name  nos
      0   1       1a    one    1
      1   1       1a    two    1
      2   2       2b  three    1
      3   3       3a   four    4
      4   3       3b   five    4
      5   3       3c    six    4
      6   3       3d  seven    4
      

      【讨论】:

      • 感谢 piRsquared 花时间回答这个问题。我从来没有想过这么多选择。
      • @Arpit 没问题,我认为展示解决同一问题的方法的多样性很重要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      相关资源
      最近更新 更多