【问题标题】:Pandas Dataframe create new column with grouppy count with condition on countPandas Dataframe 使用 groupby 计数创建新列,条件为计数
【发布时间】:2022-12-15 07:23:00
【问题描述】:

我有这个数据框

 df = pd.DataFrame({"A": [1, 1, 1, 1, 1, 2, 2, 2, 3], "B": [1, 4, 5, 6, 10, 7, 8, 9, 3], "C": ["Hello", "World", "How", "are", "you", "today", "miss", "?", "!"]})

    A    B      C
0  a1   a1  Hello
1  a1   a4  World
2  a1   a5    How
3  a1   a6    are
4  a1  a10    you
5  a2   a7  today
6  a2   a8   miss
7  a2   a9      ?
8  a3   a3      !

我想要这样的东西

    A   B      C   n
1  a1  a4  World   4
2  a1  a5    How   4
3  a1  a6    are   4
4  a1  a10   you   4
5  a2  a7  today   3
6  a2  a8   miss   3
7  a2  a9      ?   3
8  a3  a3      !   0

我试过这个操作

df["n"] = df.loc[df.A != df.B].groupby("A")["B"].transform(len)

但我有这个结果

    A   B      C   n
0  a1  a1  Hello   NaN
1  a1  a4  World   4
2  a1  a5    How   4
3  a1  a6    are   4
4  a1  a10   you   4
5  a2  a7  today   3
6  a2  a8   miss   3
7  a2  a9      ?   3
8  a3  a3      !   NaN

你知道我可以在 transform 上而不是在原始数据帧上设置我的条件 df.A != df.B 吗? 谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    利用:

    df["n"] = (df.A != df.B).groupby(df["A"]).transform('sum')
        
    print (df)
       A   B      C  n
    0  1   1  Hello  4
    1  1   4  World  4
    2  1   5    How  4
    3  1   6    are  4
    4  1  10    you  4
    5  2   7  today  3
    6  2   8   miss  3
    7  2   9      ?  3
    8  3   3      !  0
    

    或者:

    df["n"] = df.assign(B = df.A != df.B).groupby("A")['B'].transform('sum')
        
    print (df)
    
       A   B      C  n
    0  1   1  Hello  4
    1  1   4  World  4
    2  1   5    How  4
    3  1   6    are  4
    4  1  10    you  4
    5  2   7  today  3
    6  2   8   miss  3
    7  2   9      ?  3
    8  3   3      !  0
        
    

    【讨论】:

      【解决方案2】:

      是的,您可以在执行 groupby 操作之前使用 .transform() 方法对 DataFrame 中的数据应用条件。以下是如何执行此操作的示例:

      df["n"] = df.groupby("A")["B"].transform(lambda x: len(x[x != x.index]))
      

      这将在 DataFrame 中创建一个名为“n”的新列,其中将包含列“A”的每个值的列“B”的唯一值的数量,不包括等于相应索引值的任何值。

      这是生成的 DataFrame:

         A   B      C  n
      0  a1  a1  Hello  4
      1  a1  a4  World  4
      2  a1  a5    How  4
      3  a1  a6    are  4
      4  a2  a7    you  3
      5  a2  a8  today  3
      6  a2  a9   miss  3
      7  a3  a3      ?  0
      
      

      如您所见,“n”列现在包含“B”列中每个“A”值的唯一值的正确计数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-24
        • 2013-07-14
        • 2021-06-11
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多