python - Pandas Dataframe 上两列的条件更新

标签 python pandas dataframe

我有一个 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/

相关文章:

python - cython;pyside2;递归错误: maximum recursion depth exceeded while calling a Python object

python - 在 Pandas 中,如何以特定频率创建索引但仅适用于特定月份?

Python:有没有比使用自动更正拼写更正更快的方法?

python - 尝试从 json 输入构建列表时出现 "string indices must be integers"错误

python - 获取 Python Decimal 的精确十进制字符串表示?

python - 如果满足条件,pandas 将值从一列复制到另一列

Python如何使用panda dataframe列从3个点获取角度

python - pandas groupby 访问最后一组

r - 如何根据一天中的时间从一个数据帧中派生出 2 个数据帧?

python - 从 Web 浏览器运行 python 脚本来控制 Piface 继电器