如何在Pandas DataFrame列中删除指定值并调整或合并重复值?
处理Pandas DataFrame实现有序排列及X值处理
看起来你想要调整DataFrame的['I']列使其按10-50的顺序排列,同时针对['G']/['H']列的'X'值实现两种不同的处理逻辑。你之前尝试的df.drop(df.H == 'X')会删除整行,不符合需求,下面是两种方案的正确实现:
首先先还原你的初始DataFrame:
import pandas as pd d = pd.DataFrame({ 'J' : [10,'B','C','C',50], 'I' : ['B',20,30,40,'C'], 'H' : ['X','A','C','B','X'], 'G' : ['X', 'B', 'A','B','X'], })
方案1:删除['H']列中等于'X'的值(保留行,清空对应单元格)
这里的“删除”是指将H列中值为'X'的单元格置为空,而非删除整行。同时我们需要调整I列的值,让它按10-50的顺序排列:
# 调整I列,将J列的10和50对应赋值到I列的第0、4行,实现10-50的顺序 d.loc[0, 'I'] = d.loc[0, 'J'] d.loc[4, 'I'] = d.loc[4, 'J'] # 将H列中的'X'替换为空字符串,实现“删除”效果 d['H'] = d['H'].replace('X', '') # 打印结果 print(d)
输出结果和你的预期一致:
G H I J 0 X 10 10 1 B A 20 B 2 A C 30 C 3 B B 40 C 4 X 50 50
方案2:合并同一行中['G']和['H']列的'X'值
这里的“合并”是指当某一行的G和H均为'X'时,将这两个单元格合并为'XX'(按你的预期输出合并到G列,同时清空H列对应值),同时调整I列顺序:
# 先调整I列,实现10-50的有序排列 d.loc[0, 'I'] = d.loc[0, 'J'] d.loc[4, 'I'] = d.loc[4, 'J'] # 筛选出G和H均为'X'的行,合并为'XX'并更新G列,清空H列 mask = (d['G'] == 'X') & (d['H'] == 'X') d.loc[mask, 'G'] = 'XX' d.loc[mask, 'H'] = '' # 打印结果 print(d)
输出结果符合你的预期:
G H I J 0 XX 10 10 1 B A 20 B 2 A C 30 C 3 B B 40 C 4 XX 50 50
如果你的需求是让I列直接严格按10,20,30,40,50排列(无需关联J列的值),也可以直接赋值:
d['I'] = [10, 20, 30, 40, 50]
这种方式更直接,根据你的实际场景选择即可。
内容的提问来源于stack exchange,提问作者user9410826
相关产品推荐
相关产品推荐

