繁体   English   中英

根据熊猫数据框中的特定 id 更改列的值

[英]Change value of column based on specific id in pandas dataframe

我有以下排序的数据框,我想将id 列中每个id的最后一个值设置为0

id value
1   500
1   50
1   36
2   45
2   150
2   70
2   20
2   10

我可以使用df['value'].iloc[-1] = 0将整个id 列的最后一个值设置为df['value'].iloc[-1] = 0 如何设置id : 1id : 2的最后一个值以获得以下输出。

id value
1   500
1   50
1   0
2   45
2   150
2   70
2   20
2   0

您可以执行drop_duplicates并保留 last 以获取每个 id 的最后一行。 使用这些行的index并将值设置为 0

df.loc[df['id'].drop_duplicates(keep='last').index, 'value'] = 0

print(df)
   id  value
0   1    500
1   1     50
2   1      0
3   2     45
4   2    150
5   2     70
6   2     20
7   2      0
 df.loc[~df.id.duplicated('last'),'value']=0

崩溃了

    m=df.id.duplicated('last')
    
    df.loc[~m,'value']=0




id  value
0   1    500
1   1     50
2   1      0
3   2     45
4   2    150
5   2     70
6   2     20
7   2      0

这个怎么运作

m=df.id.duplicated('last')# Selects the last duplicated in column id

~m reverses that and hence last duplicated becomes true

df.loc[~m,'value']# loc accessor allows us to reach the True value in the nominated column to write with 0

如果您愿意使用numpy这里是一个快速的解决方案:

import numpy as np

# Recreate example
df = pd.DataFrame({
    "id":[1,1,1,2,2,2,2,2],
    "value": [500,50,36,45,150,70,20,10]
})
# Solution
df["value"] = np.where(~df.id.duplicated(keep="last"),0,df["value"].to_numpy())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM