【问题标题】:Identify first non-zero element within a group in pandas识别熊猫组中的第一个非零元素
【发布时间】:2018-07-29 19:38:43
【问题描述】:

我有一个如下所示的数据框。最右边的列是我想要的列:

Group   Value   Target_Column   
1        0         0     
1        0         0  
1        1         1
1        2         0
2        0         0
2        1         1
2        0         0
2        1         0

如何识别组中的第一个非零值 (Group),然后创建一个保留第一个非零值并将所有其他值显示为零的列?

我一直在尝试利用 idxmax 来解决这个问题,如本解决方案中所述: Find first non-zero value in each column of pandas DataFrame

import pandas as pd
df = pd.DataFrame({'Group': [1,1,1,1,2,2,2,2], 'Value': [0,0,1,1,0,1,0,1]})
df.ne(0).idxmax()
g = df.groupby('Group').Value
g.ne(0).idxmax()

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    使用idxmax

    df['Newcol']=0
    df.loc[df.Value.ne(0).groupby(df['Group']).idxmax(),'Newcol']=1
    df
    Out[41]: 
       Group  Value  Target_Column  Newcol
    0      1      0              0       0
    1      1      0              0       0
    2      1      1              1       1
    3      1      2              0       0
    4      2      0              0       0
    5      2      1              1       1
    6      2      0              0       0
    7      2      1              0       0
    

    【讨论】:

    • 感谢您的回答。我注意到对于没有非零值的组(Value 列中的所有值都是 0),NewCol 显示第一个元素的 1。如果没有非零元素,如何为所有元素显示零?
    • @gibbz00 这样做是为了保护df.loc[df.Newcol.eq(0),'Newcol']=0 最后
    • 谢谢。我想你的意思是df.loc[df.Value.eq(0),'Newcol']=0
    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 2022-01-02
    • 2021-03-16
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多