Python Panda:使用文本列的前两个字母创建列

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'] 现在我想创建一个第

如何使用其他列的前两个字母创建列,但不包括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']
现在我想创建一个第四列,在排序后将“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)