根据条件合并两个数据框



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

df1中,有duration。在df2中,有usageTime。在df3上,如果df2没有usageTime值,我想将totalTime设置为df1duration值。

这里是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
    

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

在使用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

最新更新