将两个pandas DataFrame合并为一个新的

时间:2017-08-30 21:16:24

标签: python pandas

我有两个Pandas DataFrame,其数据来自不同的来源,但两个DataFrame都有相同的列名。合并时,只有一列会保留名称。

像这样:

speed_df = pd.DataFrame.from_dict({
    'ts':  [0,1,3,4],
    'val': [5,4,2,1]
    })

temp_df = pd.DataFrame.from_dict({
    'ts':  [0,1,2],
    'val': [9,8,7]
    })

我需要得到这样的结果:

final_df = pd.DataFrame.from_dict({
    'ts':    [0,1,2,3,4],
    'speed': [5,4,NaN,1],
    'temp':  [9,8,7,NaN,NaN]
    })

稍后我将通过复制先前有效值的值来处理空单元格(这里填充NaN)。得到这样的东西:

final_df = pd.DataFrame.from_dict({
    'ts':    [0,1,2,3,4],
    'speed': [5,4,4,1],
    'temp':  [9,8,7,7,7]
    })

3 个答案:

答案 0 :(得分:5)

使用pd.merge

In [406]: (pd.merge(speed_df, temp_df, how='outer', on='ts')
             .rename(columns={'val_x': 'speed','val_y': 'temp'})
             .sort_values(by='ts'))
Out[406]:
   ts  speed  temp
0   0    5.0   9.0
1   1    4.0   8.0
4   2    NaN   7.0
2   3    2.0   NaN
3   4    1.0   NaN

In [407]: (pd.merge(speed_df, temp_df, how='outer', on='ts')
             .rename(columns={'val_x': 'speed', 'val_y': 'temp'})
             .sort_values(by='ts').ffill())
Out[407]:
   ts  speed  temp
0   0    5.0   9.0
1   1    4.0   8.0
4   2    4.0   7.0
2   3    2.0   7.0
3   4    1.0   7.0

答案 1 :(得分:0)

两个主要的DataFrame选项,一个是#create a temp file echo "<?php // Silence is golden" > /tmp/index.php #for each directory copy the file find /mydir -type d -exec cp /tmp/index.php {} \; #Alternative : for each directory copy the file where the file is not already present find /mydir -type d \! -exec test -e '{}/index.php' \; -exec cp /tmp/index.php {} \; ,另一个是pd.merge。这是代码:

pd.fillna

希望这会有所帮助。

由于

答案 2 :(得分:-1)

您需要使用pandas.merge函数

执行左外连接
d = pd.merge(speed_df,temp_df,on='ts',how='outer').rename(columns=\
{'val_x':'speed','val_y':'temp'})
d = d.sort_values('ts')
d['speed']=d['speed'].fillna(4)
d['temp']=d['temp'].fillna(7)

那应该给你回复:

enter image description here