根据ID替换PandasDataFrame每行中第一个出现的文本

aiazj4mn  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(140)

我正在尝试基于ID替换第一个出现的值。我的数据集如下所示:

df=

Index     ID             Status  
0     1895001            review   
1     1895001            review      
2     1895001            review      
3     2104264            review        
4     2102404            review        
5     2102404            review         
6     1809905            review
7     1809905            review       
8     1809905            review      
9     1811700            review

我试过这个df.values[df.index, np.argmax(df.values=="review",1)] = "first review",但它取代了所有的:(
这是我所期待的:

df=

Index   ID                   Status
0    1895001             first review         
1    1895001             review      
2    1895001             review       
3    2104264             first review        
4    2102404             first review        
5    2102404             review         
6    1809905             first review
7    1809905             review       
8    1809905             review       
9    1811700             first review
igetnqfo

igetnqfo1#

将布尔索引与duplicated的布尔逆(~)一起使用:

df.loc[~df['ID'].duplicated(), 'Status'] = 'first review'

输出:

Index       ID        Status
0      0  1895001  first review
1      1  1895001        review
2      2  1895001        review
3      3  2104264  first review
4      4  2102404  first review
5      5  2102404        review
6      6  1809905  first review
7      7  1809905        review
8      8  1809905        review
9      9  1811700  first review
yh2wf1be

yh2wf1be2#

你可以使用panda的groupby方法根据ID来识别第一个出现的对象,然后使用布尔索引来更新'Status'列。

df.loc[df.groupby('ID').apply(lambda x: x['Status'].index[0]), 'Status'] = 'first review'

此代码基于“ID”列创建一组行,然后查找每组中第一次出现“review”的索引。然后,它将这些行的“Status”列更新为“first review”。
生成的 Dataframe 应如下所示:

Index       ID         Status
0      0  1895001  first review
1      1  1895001       review
2      2  1895001       review
3      3  2104264  first review
4      4  2102404  first review
5      5  2102404       review
6      6  1809905  first review
7      7  1809905       review
8      8  1809905       review
9      9  1811700  first review

相关问题