【问题标题】:counting unique values using .groupby in pandas dataframe在熊猫数据框中使用 .groupby 计算唯一值
【发布时间】:2020-12-17 04:22:58
【问题描述】:

我有一个数据框,当我运行我的代码时,它会返回所有 Nan 而不是返回计数值。 我确定这很简单,但我无法弄清楚。我试图在每个位置获得唯一数量的物种。我希望新列输出物种计数 [2,2,1,1,2,2,1,1]

import pandas as pd

df = pd.DataFrame({
         'ID': [1, 2, 3, 4, 5, 6, 7, 8],
         'location': ['A', 'A', 'C', 'C', 'E', 'E', 'E', 'E'],
         'Species': ['Cat', 'Cat', 'Dog', 'Cat', 'Cat', 'Cat', 'Dog', 'Bird'],
         'Count': [2,2,2,2,4,4,4,4]
})

def abundance(data):
    data["Abundance"] = data[data.Species.notnull()].groupby('location')['Species'].unique()

abundance(df)
print(df)
````````````````````
   ID location Species  Count Abundance
0   1        A     Cat      2       NaN
1   2        A     Cat      2       NaN
2   3        C     Dog      2       NaN
3   4        C     Cat      2       NaN
4   5        E     Cat      4       NaN
5   6        E     Cat      4       NaN
6   7        E     Dog      4       NaN
7   8        E    Bird      4       NaN

【问题讨论】:

    标签: python pandas dataframe unique


    【解决方案1】:

    我相信您想要计算每一对 location, Species。而且,要将groupby 输出分配回原始数据帧,我们通常使用transform

    df['Abundance'] = df.groupby(['location','Species']).Species.transform('size')
    

    输出:

       ID location Species  Count  Abundance
    0   1        A     Cat      2          2
    1   2        A     Cat      2          2
    2   3        C     Dog      2          1
    3   4        C     Cat      2          1
    4   5        E     Cat      4          2
    5   6        E     Cat      4          2
    6   7        E     Dog      4          1
    7   8        E    Bird      4          1
    

    【讨论】:

    • 这正是我想要的。我以前使用过 .transform('count') ,但我需要的是“大小”。谢谢
    【解决方案2】:
    df.groupby(['location','Species']).Species.value_counts().to_frame('Abundance')
    
    
    
                                Abundance
    location Species Species           
    A        Cat     Cat              2
    C        Cat     Cat              1
             Dog     Dog              1
    E        Bird    Bird             1
             Cat     Cat              2
             Dog     Dog              1
    

    【讨论】:

      【解决方案3】:

      我认为您应该尝试使用您希望在输出中包含的列对数据框进行分组,

      >>> df[df.Species.notnull()].groupby(['location','Species']).count()
                        ID  Count
      location Species           
      A        Cat       2      2
      C        Cat       1      1
               Dog       1      1
      E        Bird      1      1
               Cat       2      2
               Dog       1      1
      

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        相关资源
        最近更新 更多