首页 > 解决方案 > 根据条件合并两个数据框

问题描述

我正在尝试有条件地合并两个数据框。

df1,它有duration。在df2,它有usageTime。On ,如果没有值df3,我想设置totalTimedf1'值。durationdf2usageTime

这是df1:

>> df1
            duration
device
1110100         53.8
1110101         64.7
1110102         52.6
1110103         14.4

和df2:

>> df2
           usageTime
deviceId
1110100         87.6
1110101         94.3
1110102         None
1110103         None

我要创建的下一个数据框是:

>> df3
          totalUsage
device
1110100         87.6
1110101         94.3
1110102         52.6
1110103         14.4

我尝试过的事情:

  1. pandas.DataFrame.combine_first()

    df3 = df2.combine_first(df1.rename(columns={'duration': 'totalUsage'}))
    

    回报:

            totalUsage  usageTime
    device
    1110100       53.8       87.6
    1110101       64.7       94.3
    1110102       52.6       None
    1110103       14.3       None
    
  2. pandas.DataFrame.fillna()

    df3 = df2.fillna(df1)
    df3.columns = ['totalUsage']
    

    回报:

              totalUsage
    device
    1110100         87.6
    1110101         94.3
    1110102          NaN
    1110103          NaN
    

我对所有想法持开放态度。

标签: pythonpandasdataframe

解决方案


使用时指定列名fillna,然后转换结果to_frame

df3 = df2.usageTime.fillna(df1.duration).to_frame(name='totalUsage')

#          totalUsage
# deviceId           
# 1110100        87.6
# 1110101        94.3
# 1110102        52.6
# 1110103        14.4

推荐阅读