Python Panda:使用文本列的前两个字母创建列
如何使用其他列的前两个字母创建列,但不包括NaN?我有三列Python Panda:使用文本列的前两个字母创建列,python,pandas,Python,Pandas,如何使用其他列的前两个字母创建列,但不包括NaN?我有三列 a=pd.Series(['Eyes', 'Ear', 'Hair', 'Skin']) b=pd.Series(['Hair', 'Liver', 'Eyes', 'NaN']) c=pd.Series(['NaN', 'Skin', 'NaN', 'NaN']) df=pd.concat([a, b, c], axis=1) df.columns=['First', 'Second', 'Third'] 现在我想创建一个第
a=pd.Series(['Eyes', 'Ear', 'Hair', 'Skin'])
b=pd.Series(['Hair', 'Liver', 'Eyes', 'NaN'])
c=pd.Series(['NaN', 'Skin', 'NaN', 'NaN'])
df=pd.concat([a, b, c], axis=1)
df.columns=['First', 'Second', 'Third']
现在我想创建一个第四列,在排序后将“first”、“Second”和“Third”中的前两个字母组合在一起(,这样Ear位于头发之前,而不考虑列)。但它会跳过NaN值
第四列的最终输出如下所示:
Fourth = pd.Series(['EyHa', 'EaLiSk', 'EyHa', 'Sk'])
如果
NaN
是np.NaN
-缺少值:
a=pd.Series(['Eyes', 'Ear', 'Hair', 'Skin'])
b=pd.Series(['Hair', 'Liver', 'Eyes', np.nan])
c=pd.Series([np.nan, 'Skin', np.nan, np.nan])
df=pd.concat([a, b, c], axis=1)
df.columns=['First', 'Second', 'Third']
df['new'] = df.apply(lambda x: ''.join(sorted([y[:2] for y in x if pd.notnull(y)])), axis=1)
另一个解决方案:
df['new'] = [''.join([y[:2] for y in x]) for x in np.sort(df.fillna('').values, axis=1)]
#alternative
#df['new'] = [''.join(sorted([y[:2] for y in x if pd.notnull(y)])) for x in df.values]
print (df)
First Second Third new
0 Eyes Hair NaN EyHa
1 Ear Liver Skin EaLiSk
2 Hair Eyes NaN EyHa
3 Skin NaN NaN Sk
如果
NaN
是string
:
df['new'] = df.apply(lambda x: ''.join(sorted([y[:2] for y in x if y != 'NaN'])), axis=1)
df['new'] = [''.join(sorted([y[:2] for y in x if y != 'NaN'])) for x in df.values]
,您只需要先切片并添加它们together@Aran-Fey-感谢您的评论,有疑问的是
NaN
s是字符串,但实际上它缺少值,所以为这两种情况添加解决方案。是的,NaN缺少值。我尝试了您的方法,并收到一条错误消息:(“'int'对象不可订阅”,“发生在索引0上”)。知道为什么吗?@DshM-我想有一些数值,试试df['new']=df.apply(lambda x:''.join(排序([str(y)[:2]如果pd.notnull(y)]),axis=1)