gpt4 book ai didi

python - 在 Pandas 中,如何用另一个子数据帧替换子数据帧

转载 作者:行者123 更新时间:2023-12-01 23:14:51 24 4
gpt4 key购买 nike

我有以下 2 个 pandas 数据框(列名相同,但 df1 包含 2019 年的数据,df2 包含 2020 年的数据):

df1

DateTime            Col1    Col2      Col3
2019-10-14 00:00:00 5.35 201.75 16.50
2019-10-14 00:10:00 4.90 187.65 16.49
2019-10-14 00:20:00 4.80 186.89 16.48
2019-10-14 00:30:00 5.12 177.48 16.46
2019-10-14 00:40:00 5.83 332.94 6.45

df2

DateTime            Col1    Col2       Col3
2020-10-14 00:00:00 5.35 231.75 14.50
2020-10-14 00:10:00 6.90 217.15 14.49
2020-10-14 00:20:00 6.80 181.69 14.46
2020-10-14 00:30:00 7.12 175.48 14.48
2020-10-14 00:40:00 5.83 212.95 15.45

我需要用 df2 中的行替换 2020-10-14 00:10:00 和 2020-10-14 00:30:00(包括)之间的 df1 行。

这是预期的结果(第 2、3、4 行取自 df2,而 DateTime 值保留自 df1):

DateTime            Col1    Col2      Col3
2019-10-14 00:00:00 5.35 201.75 16.50
2019-10-14 00:10:00 6.90 217.15 14.49
2019-10-14 00:20:00 6.80 181.69 14.46
2019-10-14 00:30:00 7.12 175.48 14.48
2019-10-14 00:40:00 5.83 332.94 6.45

我该怎么做?能否在这里套用 Pandas 的“where”?

最佳答案

DatetimeIndex 匹配的解决方案,对于 2020 年的日期减去一年,因此匹配另一个 DataFrame 中的 2019 行:

df22 = df2.set_index('DateTime').loc['2020-10-14 00:10:00':'2020-10-14 00:30:00']
df1 = df1.set_index('DateTime')

df = df22.rename(lambda x: x - pd.DateOffset(years=1)).combine_first(df1)
print (df)
Col1 Col2 Col3
DateTime
2019-10-14 00:00:00 5.35 201.75 16.50
2019-10-14 00:10:00 6.90 217.15 14.49
2019-10-14 00:20:00 6.80 181.69 14.46
2019-10-14 00:30:00 7.12 175.48 14.48
2019-10-14 00:40:00 5.83 332.94 6.45

替代更新:

df22 = df2.set_index('DateTime').loc['2020-10-14 00:10:00':'2020-10-14 00:30:00']
df1 = df1.set_index('DateTime')

df22 = df22.rename(lambda x: x - pd.DateOffset(years=1))

df1.update(df22)
print (df1)
Col1 Col2 Col3
DateTime
2019-10-14 00:00:00 5.35 201.75 16.50
2019-10-14 00:10:00 6.90 217.15 14.49
2019-10-14 00:20:00 6.80 181.69 14.46
2019-10-14 00:30:00 7.12 175.48 14.48
2019-10-14 00:40:00 5.83 332.94 6.45

关于python - 在 Pandas 中,如何用另一个子数据帧替换子数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69117123/

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