所以我要用另一个列中的值替换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']})
非常感谢您的帮助:)
答案 0 :(得分:2)
如果我对您的理解正确,那么您想检查not NaN
列中的B
并使用loc
来替换A
列中值不相等的值( ne
至dog
:
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']