我有一个csv文件,如下所示:
ID Class Status Species
1 Sands D Carex
1 Sands C Eupesu
1 Sands C Poapra
2 Limy D Carcra
2 Limy C Eupesu
2 Limy C Poapra
3 Limy D Poapra
3 Limy C Eupesu
3 Limy C Poapra
当Status
是D
而Species
是Carex或Carcra时,我想将特定ID中所有值的Class
更改为Wet
。我想要的输出是:
ID Class Status Species
1 Wet D Carex
1 Wet C Eupesu
1 Wet C Poapra
2 Wet D Carcra
2 Wet C Eupesu
2 Wet C Poapra
3 Limy D Poapra
3 Limy C Eupesu
3 Limy C Poapra
您标记了pandas,所以我假设您可以将其作为数据帧导入。你知道吗
如果是的话,我想你在找这样的东西:
好吧,这个答案可能效率很低,因为它需要将文件中的所有行存储到内存中。为了只编辑文件的那一部分,好吧,我稍后会查看并编辑这个答案。但是现在,如果你有一个不超过,我不知道,50mb的文件?,就用这个。你知道吗
请备份您的实际文件之前运行这个,因为它可能会把整个事情搞砸。(未经测试)
收益率
任务
使
df
看起来像这样:现在,(感谢DSM):
将
mask
按df['ID']
分组,如果原始mask
中的任何值为真,则将True
分配给该组的所有行,否则False
。你知道吗df.loc
可用于从df
中选择行和列。df.loc[mask]
选择mask
为真的行:df.loc[mask, 'Class']
进一步选择列Class
:df.loc[mask]['Class'] = value
可能无法修改df
,因为df.loc[mask]
返回一个副本。(这同样适用于df[mask]['Class'] = value
)。使用[...]
两次被称为“链式索引”,如果我们避免链式索引,这个问题是可以避免的。你知道吗因此,不要使用
[...]
两次,而是使用df.loc[mask, 'Class'] = 'Wet'
:相关问题 更多 >
编程相关推荐