Python 基于数据库中的条件对数据列进行切片
我有一个dfPython 基于数据库中的条件对数据列进行切片,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 我相信您需要使用|链接的条件,但对于检查多个空格,最好先将列转换为字符串(因为可能存在混合类型-带字符串的数字),然后将一个或多个空格转换为空字符
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