Python 基于数据库中的条件对数据列进行切片

Python 基于数据库中的条件对数据列进行切片,python,pandas,dataframe,data-analysis,Python,Pandas,Dataframe,Data Analysis,我有一个df A B 0 a 1.0 1 b,c 2.0 2 3 c,d NaN 我正在尝试切片df[“A”]当df[“B”]为NaN或空白“时,我未能通过(,)切片。请帮助我实现它,我希望的输出是 外(外) A B 0 a 1.0 1 b,c 2.0 2 3 c NaN 我相信您需要使用|链接的条件,但对于检查多个空格,最好先将列转换为字符串(因为可能存在混合类型-带字符串的数字),然后将一个或多个空格转换为空字符

我有一个df

    A    B
0   a    1.0
1   b,c  2.0
2
3   c,d  NaN
我正在尝试切片
df[“A”]当df[“B”]为NaN或空白“
时,我未能通过(,)切片。请帮助我实现它,我希望的输出是

外(外)

    A    B
0   a    1.0
1   b,c  2.0
2
3   c    NaN

我相信您需要使用
|
链接的条件,但对于检查多个空格,最好先将列转换为
字符串(因为可能存在混合类型-带字符串的数字),然后将一个或多个空格转换为空字符串:

df = df.loc[df['B'].isnull() | (df['B'].astype(str).str.strip() == ''),  'A']
print (df)
2       
3    c,d
Name: A, dtype: object
替代解决方案包括:

编辑:


使用
np.where

df['new'] = np.where((pd.isnull(df['B']))|(df['B']==''), df['A'].str.split(',').str[0], df['A'])
df.其中

df['A'].where((pd.notnull(df['B']))|(df['B']==''), df['A'].str.split(',').str[0])
A B新的 0 a 1 a 1 b,c 2 b,c 2. 3 c、d和c
预期输出是否正常?输入和输出之间的区别是什么?它们完全一样?抱歉@Bharath,我编辑了我的预期输出,请check@pyd我的解决方案有用吗?抱歉@jezrael,,我编辑了我的预期输出,请立即检查谢谢您的解决方案,但为什么您总是从np开始。where:PAll关于快速性,它比df快。where
so
df['new'] = np.where((pd.isnull(df['B']))|(df['B']==''), df['A'].str.split(',').str[0], df['A'])
df['A'].where((pd.notnull(df['B']))|(df['B']==''), df['A'].str.split(',').str[0])
A B new 0 a 1 a 1 b,c 2 b,c 2 3 c,d NaN c