【问题标题】:mask and concatenate two string series in pandas屏蔽并连接熊猫中的两个字符串系列
【发布时间】:2021-09-17 10:46:22
【问题描述】:

我正在努力让它发挥作用。我掩盖了 NaN,然后​​将两个系列连接起来。不能以这种方式使用+ 进行连接吗?如果不是最好的方法是什么?

    row_mask = df[df[win_end].notnull()]
    df.loc[row_mask, df['window_full']] = df.loc[row_mask, win_start]+' - '+df.loc[row_mask, win_end]
    print(df['window_start', 'window_end', 'window_full'])

输入

win_start     win_end
2021-12-16    2021-12-18
2022-01-19    NaN
2022-01-18    2022-01-20

预期输出

win_start     win_end        window_full
2021-12-16    2021-12-18     2021-12-16 - 2021-12-18
2022-01-19    NaN            NaN
2022-01-18    2022-01-20     2022-01-18 - 2022-01-20

错误

ValueError: Cannot index with multidimensional key

编辑

感谢您的快速回复。所以我尝试使用'window_full',但仍然出现错误:-

ValueError: Cannot index with multidimensional key

编辑 2 工作解决方案需要通过布尔掩码:-

row_mask = df['win_end'].notnull()
df.loc[row_mask, 'window_full'] = (df.loc[row_mask, 'win_start']+' - '+df.loc[row_mask, 'win_end'])

【问题讨论】:

    标签: python pandas concatenation mask


    【解决方案1】:

    对于分配新列使用列名而不是系列df['window_full'],与选择的语法相同,也需要传递布尔掩码而不是过滤的DataFrame row_mask = df[df[win_end].notnull()]

    row_mask = df['win_end'].notnull()
    df.loc[row_mask, 'window_full'] = (df.loc[row_mask, 'win_start']+' - '+
                                       df.loc[row_mask, 'win_end'])
    

    或者测试两列:

    row_mask = df[['win_end', win_start]].notnull().any(axis=1)
    df.loc[row_mask, 'window_full'] = (df.loc[row_mask, 'win_start']+' - '+
                                       df.loc[row_mask, 'win_end'])
    

    【讨论】:

    • 投反对票的不是我。但目前这仍然不起作用。
    • @Cam - 我知道。答案已编辑。
    • @Cam - 如果不工作,有什么错误吗?
    • 我已经添加了括号但仍然是同样的错误...?
    • 破解了它。感谢您的帮助。
    猜你喜欢
    • 2012-08-05
    • 2018-08-08
    • 2014-10-20
    相关资源
    最近更新 更多