如何有条件地仅映射列的空行?

时间:2018-09-18 19:13:47

标签: python pandas

我如何创建一个新的数据框列,该列映射到字典,但仅适用于空白行,同时为非空白行保留引用列的值?下面,我通过将'col1'映射到x创建了'new col',但我希望仅在'col2'为空的情况下映射到x,否则将使用col2中的值。

Exception

实际结果:

import pandas as pd
x = {'three':'green','four':'purple','five':'orange'}
d = {'col1': ['three', 'four', 'five'], 'col2':['blue',"","red"]}
df = pd.DataFrame(data=d)
df['new col']=df['col1'].map(x)

所需结果(新列在第0行和第2行中保留值'blue'和'red',但将第1行映射到x):

    col1  col2  new col
0   three blue   green
1   four         purple
2   five  red    orange

3 个答案:

答案 0 :(得分:5)

使用import { shallow } from 'enzyme'; import React from 'react'; import { TouchableOpacity } from 'react-native'; import SignUp from '../../components/SignUp'; import renderer from 'react-test-renderer'; import '@firebase/firestore'

np.where

答案 1 :(得分:2)

使用maskfillna

df.col2.mask(df.col2.eq('')).fillna(df.col1.map(x))

0      blue
1    purple
2       red
Name: col2, dtype: object

df.assign(newcol=df.col2.mask(df.col2.eq('')).fillna(df.col1.map(x)))

    col1  col2  newcol
0  three  blue    blue
1   four        purple
2   five   red     red

使用loc的就地选项:

此选项比np.wheremask都慢,但是可以清楚地说明我们在做什么。

df['newcol'] = df.col2
df.loc[df.col2.eq(''), 'newcol'] = df.col1.map(x)

答案 2 :(得分:0)

使用pandas.DataFrame.apply

df['new col'] = df.apply(
    lambda row: x[row['col1']] if row['col2'] == '' else row['col2'], axis=1)