熊猫用另一列中的值替换了列中的值,但保留了一些值

时间:2019-10-22 08:49:06

标签: python-3.x pandas dataframe

所以我要用另一个列中的值替换Dataframe列中的某些值,如下所示:

df['A'] = df.ffill(1)['B']

但是,我不想替换A列中的某些值并将它们保持原样。

我要保留的值多次出现并且是一个字符串,所以也许有一种方法可以用列B替换列A中的所有内容,但用特定的字符串保留值?

示例: 因此,假设我的数据框看起来像这样,我想保留A列中的值狗,然后用B列中的值替换其余值(NaN值除外)。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['dog', 'cat', 'mouse', 'spider', 'fish', 'dog'],
                   'B': ['New York', 'London', np.nan, 'Berlin', np.nan, 
                         'Paris']})

reslut应该看起来像这样:

df_result = pd.DataFrame({'A': ['dog', 'London', 'mouse', 'Berlin', 'fish', 
                                'Paris']})

非常感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,那么您想检查not NaN列中的B并使用loc来替换A列中值不相等的值( nedog

m1 = df['A'].ne('dog')
m2 = df['B'].notna()

df.loc[m1&m2, 'A'] = df['B']

        A         B
0     dog  New York
1  London    London
2   mouse       NaN
3  Berlin    Berlin
4    fish       NaN
5     dog     Paris

答案 1 :(得分:2)

IIUC:

String

答案 2 :(得分:0)

您可以循环遍历“ A”中的元素,并确保对于同一行,“ B”中的值不是NaN

(使用内置的df函数,可能会有更简洁的方法

for x in range(len(df['A'])):
    if(df['A'][x] != "dog" and df['B'][x] != np.nan):
        df['A'][x] = df['B'][x]

编辑:

使用loc的更清洁方式

df.loc[(df['A'].ne('dog')) &(df['B'].notnull()) , 'A'] = df['B']