我有一个 pandas
数据框,如果第二列的值不是 NaN
,我会尝试在其中附加两列值。重要的是,在追加这两个值之后,我需要将第二列中的值设置为 NaN
。我已设法连接这些值,但无法将第二列更新为 NaN
。
这就是我为 ldc_df[['ad_StreetNo', 'ad_StreetNo2']].head(5)
开始的内容:
ad_StreetNo ad_StreetNo2
0 284 NaN
1 51 NaN
2 136 NaN
3 196 198
4 227 NaN
这是我现在追加后的内容:
ad_StreetNo ad_StreetNo2
0 284 NaN
1 51 NaN
2 136 NaN
3 196-198 198
4 227 NaN
但这是我想要获得的:
ad_StreetNo ad_StreetNo2
0 284 NaN
1 51 NaN
2 136 NaN
3 196-198 NaN
4 227 NaN
ldc_df['ad_StreetNo2'].loc[3]
的值应更改为 NaN
。
这是我目前使用的代码:
def street_check(street_number_one, street_number_two):
if pd.notnull(street_number_one) and pd.notnull(street_number_two):
return str(street_number_one) + '-' + str(street_number_two)
else:
return street_number_one
ldc_df['ad_StreetNo'] = ldc_df[['ad_StreetNo', 'ad_StreetNo2']].apply(lambda x: street_check(*x),axis=1)
有人对我如何获得预期输出有任何建议吗?
山姆
最佳答案
# Convert the Street numbers to a string so that you can append the '-' character.
ldc_df['ad_StreetNo'] = ldc_df['ad_StreetNo'].astype(str)
# Create a mask of those addresses having an additional street number.
mask = ldc_df.loc[ldc_df['ad_StreetNo2'].notnull()
# Use the mask to append the additional street number.
ldc_df.loc[mask, 'ad_StreetNo'] += '-' + ldc_df.loc[mask, 'ad_StreetNo2'].astype(str)
# Set the additional street number to NaN.
ldc_df.loc[mask, 'ad_StreetNo2'] = np.nan
替代解决方案
ldc_df['ad_StreetNo'] = (
ldc_df['ad_StreetNo'].astype(str)
+ ['' if np.isnan(n) else '-{}'.format(str(int(n)))
for n in ldc_df['ad_StreetNo2']]
)
ldc_df['ad_StreetNo2'] = np.nan
关于python - Pandas Dataframe 上两列的条件更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843047/