This question already has answers here:
Pandas Merging 101
                                
                                    (3个答案)
                                
                        
                                2年前关闭。
            
                    
我是熊猫模块的新手。关于熊猫的合并方法,我有一个小问题。假设我有两个单独的表,如下所示:

Original_DataFrame

machine weekNum Percent
 M1        2      75
 M1        5      80
 M1        8      95
 M1       10      90


New_DataFrame

machine weekNum Percent
 M1        1      100
 M1        2      100
 M1        3      100
 M1        4      100
 M1        5      100
 M1        6      100
 M1        7      100
 M1        8      100
 M1        9      100
 M1       10      100


我使用了pandas模块的合并方法,如下所示:

pd.merge(orig_df, new_df, on='weekNum', how='left')


我得到如下:

    machine    weekNum  Percent_x  Percent_y
 0    M1           2      75         100
 1    M1           5      80         100
 2    M1           8      95         100
 3    M1          10      90         100


但是,我希望填写跳过的weekNums,并为这些行输入100,以获取所需的输出,如下所示。

machine weekNum Percent
 M1        1      100
 M1        2      75
 M1        3      100
 M1        4      100
 M1        5      80
 M1        6      100
 M1        7      100
 M1        8      95
 M1        9      100
 M1       10      90


谁能指导我如何进行?

最佳答案

我认为您需要combine_first,但首先通过常见的列set_index

df11 = df1.set_index(['machine','weekNum'])
df22 = df2.set_index(['machine','weekNum'])

df = df11.combine_first(df22).astype(int).reset_index()
print (df)
  machine  weekNum  Percent
0      M1        1      100
1      M1        2       75
2      M1        3      100
3      M1        4      100
4      M1        5       80
5      M1        6      100
6      M1        7      100
7      M1        8       95
8      M1        9      100
9      M1       10       90


df.plot.bar('weekNum', 'Percent')


python -  Pandas 合并两个数据框-LMLPHP

编辑:

对于标签:

plt.figure(figsize=(12, 8))
ax = df.plot.bar('weekNum', 'Percent')
rects = ax.patches

for rect, label in zip(rects, df['Percent']):
    height = rect.get_height()
    ax.text(rect.get_x() + rect.get_width()/2, height + 1, label, ha='center', va='bottom')

plt.ylim(ymax=120)


python -  Pandas 合并两个数据框-LMLPHP

关于python - Pandas 合并两个数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46035432/

10-11 22:48
查看更多