Pandas 如果另一列不是NaN,则填充NaN列,并进行字符串连接
如果两列不是NaN,我希望将它们连接在一起,如下所示:Pandas 如果另一列不是NaN,则填充NaN列,并进行字符串连接,pandas,dataframe,Pandas,Dataframe,如果两列不是NaN,我希望将它们连接在一起,如下所示: if(df[pd.notnull([df["Col1"]])] and df[pd.notnull([df["Col2"]])]): df["Col3"] = df["Col1"] + df["Col2"] 如果这两列都不是NULL/NaN,则将其他两个字符串放在一起,并将其放入第3列 我该怎么做呢? pd.notnull的行为与我预期的不同 我希望它能表现得像这样: "First Name" "Last Name" "Full
if(df[pd.notnull([df["Col1"]])] and df[pd.notnull([df["Col2"]])]):
df["Col3"] = df["Col1"] + df["Col2"]
如果这两列都不是NULL/NaN,则将其他两个字符串放在一起,并将其放入第3列
我该怎么做呢?
pd.notnull的行为与我预期的不同
我希望它能表现得像这样:
"First Name" "Last Name" "Full Name"
a b a b
a1 b1 a1 b1
a2 b2 a2 b2
其中,在格式化之前,“全名”列中将包含NaN
以下是格式化前数据的外观:
"First Name" "Last Name" "Full Name"
a b NaN
a1 b1 NaN
a2 b2 NaN
NaN NaN a3 b3
使用
.loc
设置Col3
等
In [383]: df
Out[383]:
Col1 Col2
0 a h
1 NaN i
2 c j
3 NaN NaN
4 NaN l
5 f m
6 g NaN
In [384]: df.loc[df[['Col1', 'Col2']].notnull().all(1), 'Col3'] = df.Col1 + df.Col2
In [385]: df
Out[385]:
Col1 Col2 Col3
0 a h ah
1 NaN i NaN
2 c j cj
3 NaN NaN NaN
4 NaN l NaN
5 f m fm
6 g NaN NaN
细节
In [386]: df[['Col1', 'Col2']].notnull().all(1)
Out[386]:
0 True
1 False
2 True
3 False
4 False
5 True
6 False
dtype: bool
使用
.loc
设置Col3
等
In [383]: df
Out[383]:
Col1 Col2
0 a h
1 NaN i
2 c j
3 NaN NaN
4 NaN l
5 f m
6 g NaN
In [384]: df.loc[df[['Col1', 'Col2']].notnull().all(1), 'Col3'] = df.Col1 + df.Col2
In [385]: df
Out[385]:
Col1 Col2 Col3
0 a h ah
1 NaN i NaN
2 c j cj
3 NaN NaN NaN
4 NaN l NaN
5 f m fm
6 g NaN NaN
细节
In [386]: df[['Col1', 'Col2']].notnull().all(1)
Out[386]:
0 True
1 False
2 True
3 False
4 False
5 True
6 False
dtype: bool
与pd.DataFrame.update一起就位
df.update(
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' ')
)
df
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
df.assign(**{
'Full Name':
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' '))
})
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
复制一份
df.update(
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' ')
)
df
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
df.assign(**{
'Full Name':
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' '))
})
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
与pd.DataFrame.update一起就位
df.update(
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' ')
)
df
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
df.assign(**{
'Full Name':
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' '))
})
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
复制一份
df.update(
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' ')
)
df
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
df.assign(**{
'Full Name':
df['Full Name'].fillna(df['First Name'].str.cat(df['Last Name'], sep=' '))
})
First Name Last Name Full Name
0 a b a b
1 a1 b1 a1 b1
2 a2 b2 a2 b2
3 NaN NaN a3 b3
我试图实现那些帖子中的逻辑,但没有用——所以我想我应该问一个更一般的组合问题。@Sam See更新。你能确认其中一个答案解决了你的问题吗?如果你可以的话,那就太好了。我试图实现那些帖子中的逻辑,但没有效果-所以我想我应该问一个更一般的组合数学问题。@Sam See updated。你能确认其中一个答案解决了你的问题吗?如果你能,那就太好了。回答得好!好答案!OOV