gpt4 book ai didi

python - Pandas 将列值替换为最后可用值

转载 作者:行者123 更新时间:2023-12-05 09:28:08 25 4
gpt4 key购买 nike

对于可以使用下面的代码导出的示例数据框,我想更新 Offset_Date 列,以便对于列 Offset_Date 中不在 列中的任何日期code>Date 我想用 Date 列中的最后一个可用值替换 Offset_Date 中的那个日期。

data = {"date": ['2021-01-01', '2021-01-03', '2021-01-04', '2021-01-05',
'2021-01-07', '2021-01-09', '2021-01-10', '2021-01-11'],

"offset_date": ['2021-01-02', '2021-01-04', '2021-01-05',
'2021-01-06', '2021-01-08', '2021-01-10',
'2021-01-11', '2021-01-12']}

test_df = pd.DataFrame(data)
test_df['date'] = pd.to_datetime(test_df['date'])
test_df['offset_date'] = pd.to_datetime(test_df['offset_date'])

为了进一步解释上述数据框日期 2021-01-02 的第一行不在 date 列中,所以我想用中的最后一个可用值替换该值date 列,即 2021-01-01

我想执行矢量化方法,所以我尝试了以下方法,但结果不正确。

test_df['offset_date_upd'] = np.where(test_df['offset_date'] in test_df['date'].values,
test_df['offset_date'],
test_df[test_df['date'] <= test_df['offset_date']].values.max())

如何使用矢量化方法获得以下所需的输出?

期望的输出

+------------+-------------+
| Date | Offset_Date |
+------------+-------------+
| 2021-01-01 | 2021-01-01 |
| 2021-03-01 | 2021-04-01 |
| 2021-04-01 | 2021-05-01 |
| 2021-05-01 | 2021-05-01 |
| 2021-07-01 | 2021-07-01 |
| 2021-09-01 | 2021-10-01 |
| 2021-10-01 | 2021-11-01 |
| 2021-11-01 | 2021-11-01 |
+------------+-------------+

最佳答案

IIUC,你可以使用isinmaskfillna:

test_df['offset_date'] = (test_df['offset_date']
.where(test_df['offset_date'].isin(test_df['date']),
test_df['date'])
)

输出:

        date offset_date
0 2021-01-01 2021-01-01
1 2021-01-03 2021-01-04
2 2021-01-04 2021-01-05
3 2021-01-05 2021-01-05
4 2021-01-07 2021-01-07
5 2021-01-09 2021-01-10
6 2021-01-10 2021-01-11
7 2021-01-11 2021-01-11

关于python - Pandas 将列值替换为最后可用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71709308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com