我如何创建一个新的数据框列,该列映射到字典,但仅适用于空白行,同时为非空白行保留引用列的值?下面,我通过将'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
答案 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)
mask
和fillna
: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.where
和mask
都慢,但是可以清楚地说明我们在做什么。
df['newcol'] = df.col2
df.loc[df.col2.eq(''), 'newcol'] = df.col1.map(x)
答案 2 :(得分:0)
df['new col'] = df.apply(
lambda row: x[row['col1']] if row['col2'] == '' else row['col2'], axis=1)