【问题标题】:Replacing values based on other columns根据其他列替换值
【发布时间】:2021-02-20 15:13:06
【问题描述】:

让我写一个数据框来解释我的问题:

Loc   Length   Size
A       5       50
A       10      90
A       8       0
B       20      140
B       5       50
B       12      0

假设我有一个这样的数据框。我想要做的是替换等于 0 的大小值。我想替换这个值,例如: 如果 Loc A 中的大小,我想要做的是(A 中的大小总和)/(A 中的长度总和)乘以 Length 并将该值更改为零。我想对每个等于 0 的 Size 值执行此操作,这取决于他的 Location 的 sumSize/sumLength 和他的行的 Length 值。 我试过了,但我什么也做不了。请帮我解决这个问题,谢谢!

【问题讨论】:

    标签: python pandas numpy dataframe replace


    【解决方案1】:

    IIUC groupby Loc 得到总和,然后 map 得到结果:

    s = df.loc[df["Size"].ne(0)].groupby("Loc").sum()
    
    df.loc[df["Size"].eq(0), "Size"] = df["Loc"].map(s["Size"]/s["Length"])*df["Length"]
    
    print (df)
    
      Loc  Length        Size
    0   A       5   50.000000
    1   A      10   90.000000
    2   A       8   74.666667
    3   B      20  140.000000
    4   B       5   50.000000
    5   B      12   91.200000
    

    【讨论】:

    • 在 map 函数中 s["Size"]/s["Length"] 的值等于 (50+90+0) ?我想要 (50+90) / (5+10) 值。因为我的数据框中的 Size 列上有太多 0 值。
    • 如果我这样做 s = df["Size" != 0].groupby("Loc").sum() 这能解决我的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2018-11-13
    • 2021-10-28
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多