为了账号安全,请及时绑定邮箱和手机立即绑定

更新数据框列并丢失日期索引

更新数据框列并丢失日期索引

一只斗牛犬 2022-11-09 17:25:15
我有两个数据框df1:            col2  col3 deptdate                       2020-05-06    29    21    A2020-05-07    56    12    B2020-05-08    82    15    C2020-05-09    13     9    D2020-05-10    35    13    E2020-05-11    53    87    F2020-05-12    25     9    G2020-05-13    23    63    Hdf2:            col2 deptdate                 2020-05-06    64    A2020-05-07    41    B2020-05-08    95    C2020-05-09    58    D2020-05-10    89    E2020-05-11    37    F2020-05-12    24    G2020-05-13    67    H我想用列col2中df1的值更新列col2,df2所以我的输出如下所示:            col2  col3 deptdate                       2020-05-06    64    21    A2020-05-07    41    12    B2020-05-08    95    15    C2020-05-09    58     9    D2020-05-10    89    13    E2020-05-11    37    87    F2020-05-12    24     9    G2020-05-13    67    63    H我写了一些看起来像这样的代码:df1=df1.set_index('dept')df1.update(df2.set_index('dept'))df1=df1.reset_index()但是它将索引重置df1为整数而不是日期,因此我得到的输出如下所示:  dept  col2  col30    A    64    211    B    41    122    C    95    153    D    58     94    E    89    135    F    37    876    G    24     97    H    67    63我的完整代码如下:import pandas as pdimport numpy as npfrom datetime import datetime, timedeltaimport datetimedept=['A','B','C','D','E','F','G','H']date_today = datetime.date.today()days = pd.date_range(date_today, date_today + timedelta(7), freq='D')np.random.seed(seed=1111)data1 = np.random.randint(1, high=100, size=len(days))data2 = np.random.randint(1, high=100, size=len(days))df1 = pd.DataFrame({'date': days, 'dept':dept,'col2': data1, 'col3': data2})df1 = df1.set_index('date')print(df1)dept=['A','B','C','D','E','F','G','H']date_today = datetime.date.today()days = pd.date_range(date_today, date_today + timedelta(7), freq='D')np.random.seed(seed=1331)data3 = np.random.randint(1, high=100, size=len(days))df2 = pd.DataFrame({'date': days, 'dept':dept,'col2': data3})df2 = df2.set_index('date')如何更新df1并df2保持索引日期格式df1?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

正如我对您的示例所了解的那样,您df1从index 和 column的df2基础上进行更新。您需要添加到索引并调用datedeptdeptupdate


df1 = df1.set_index('dept', append=True)

df1 = df1.update(df2.set_index('dept', append=True))

df1 = df1.reset_index('dept')


Out[35]:

           dept  col2  col3

date

2020-05-06    A    64    21

2020-05-07    B    41    12

2020-05-08    C    95    15

2020-05-09    D    58     9

2020-05-10    E    89    13

2020-05-11    F    37    87

2020-05-12    G    24     9

2020-05-13    H    67    63


查看完整回答
反对 回复 2022-11-09
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

concat那时你可以使用groupby


df_out=pd.concat([df1,df2],sort=False).groupby(level=0).last()

Out[261]: 

            col2  col3 dept

date                       

2020-05-06    64  21.0    A

2020-05-07    41  12.0    B

2020-05-08    95  15.0    C

2020-05-09    58   9.0    D

2020-05-10    89  13.0    E

2020-05-11    37  87.0    F

2020-05-12    24   9.0    G

2020-05-13    67  63.0    H


查看完整回答
反对 回复 2022-11-09
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您可以使用以下方法执行此操作df.update:


In [2162]: df1['col2'].update(df2['col2'])                                                                                                                                                                  


In [2163]: df1                                                                                                                                                                                              

Out[2163]: 

            col2  col3 dept

date                       

2020-05-06    64    21    A

2020-05-07    41    12    B

2020-05-08    95    15    C

2020-05-09    58     9    D

2020-05-10    89    13    E

2020-05-11    37    87    F

2020-05-12    24     9    G

2020-05-13    67    63    H


查看完整回答
反对 回复 2022-11-09
  • 3 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信