python - 根据同一行中另一列的值填充缺失值

标签 python pandas

我有一个 DataFrame 看起来像这样

ColA | ColB | ColC | ColD |
-----|------|------|------|
100  |   A  |  X1  |  NaN |
200  |   B  |  X2  |  AAA |
300  |   C  |  X3  |  NaN |

我想根据 ColA 的值填充 ColD 的缺失值。我需要的结果是这样的:

if value in ColA = 100 then value in ColD = "BBB"
if value in ColA = 300 then value in ColD = "CCC"

ColA | ColB | ColC | ColD |
-----|------|------|------|
100  |   A  |  X1  |  BBB |
200  |   B  |  X2  |  AAA |
300  |   C  |  X3  |  CCC |

最佳答案

您可以使用 combine_firstfillna :

df.ColD = df.ColD.combine_first(df.ColA)
print (df)
   ColA ColB ColC ColD
0   100    A   X1  100
1   200    B   X2  AAA
2   300    C   X3  300

或者:

df.ColD = df.ColD.fillna(df.ColA)
print (df)
   ColA ColB ColC ColD
0   100    A   X1  100
1   200    B   X2  AAA
2   300    C   X3  300

编辑:首先使用 map对于 Series s,然后通过此 Series combine_firstfillna:

d = {100: "BBB", 300:'CCC'}
s = df.ColA.map(d)
print (s)
0    BBB
1    NaN
2    CCC
Name: ColA, dtype: object

df.ColD = df.ColD.combine_first(s)
print (df)
   ColA ColB ColC ColD
0   100    A   X1  BBB
1   200    B   X2  AAA
2   300    C   X3  CCC

它只替换NaN:

print (df)
   ColA ColB ColC ColD
0   100    A   X1  EEE <- changed value to EEE
1   200    B   X2  AAA
2   300    C   X3  NaN

d = {100: "BBB", 300:'CCC'}
s = df.ColA.map(d)
df.ColD = df.ColD.combine_first(s)
print (df)
   ColA ColB ColC ColD
0   100    A   X1  EEE
1   200    B   X2  AAA
2   300    C   X3  CCC

关于python - 根据同一行中另一列的值填充缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42471164/

相关文章:

python检查字典键是否具有特定值

用于作业调度的 Python 库,ssh

python - Pandas:根据另一列的内容乘以一列

python - 我想获取不包括零的行的最小数字索引

python - 将部分字符串替换为不同列的值 pandas + python

python - 指定和不指定 dtype 的 numpy.array 行为很奇怪

python - PynamoDB - 查询或计算表上的所有项目

python - "Least Astonishment"和可变默认参数

python - 在多种条件下比较两个不同大小的数据帧

python - 关闭轴时移动 matplotlib 表格中心位置