[英]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 : 1和id : 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.