Pandas 熊猫:合并两个Dataframe、添加列和删除重复行

Pandas 熊猫:合并两个Dataframe、添加列和删除重复行,pandas,dataframe,merge,concatenation,row,Pandas,Dataframe,Merge,Concatenation,Row,我有两个数据框,比如说,1月和2月的材料库存报告: 一月报告 code description qty_jan amount_jan WP1 Wooden Part-1 1000 50000 MP1 Metal Part-1 500 5000 GL1 Glass-1 100 2500 code description qty_feb amount_feb WP1 Wooden Part-1 12

我有两个数据框,比如说,1月和2月的材料库存报告:

一月报告

code  description    qty_jan   amount_jan

WP1   Wooden Part-1  1000      50000
MP1   Metal Part-1   500       5000
GL1   Glass-1        100       2500
code  description    qty_feb   amount_feb

WP1   Wooden Part-1  1200      60000
MP2   Metal Part-2   300       3000
GL1   Glass-1        50        1250
GL2   Glass-2        200       5000

二月报告

code  description    qty_jan   amount_jan

WP1   Wooden Part-1  1000      50000
MP1   Metal Part-1   500       5000
GL1   Glass-1        100       2500
code  description    qty_feb   amount_feb

WP1   Wooden Part-1  1200      60000
MP2   Metal Part-2   300       3000
GL1   Glass-1        50        1250
GL2   Glass-2        200       5000

为了监控每个物料库存的进度,我想合并两个报告,如下所示:

code  description    qty_jan   amount_jan    qty_feb   amount_feb

WP1   Wooden Part-1  1000      50000         1200      60000
MP1   Metal Part-1   500       5000          0         0   
MP2   Metal Part-2   0         0             300       3000
GL1   Glass-1        100       2500          50        1250
GL2   Glass-2        0         0             200       5000 
注:报告中未列出的材料视为零库存

如何合并这两个报告?

您可以使用外部联接,然后将缺少的值替换为
0

df = df1.merge(df2, on=['code','description'], how='outer').fillna(0)
print (df)
v  code    description  qty_jan  amount_jan  qty_feb  amount_feb
0  WP1  Wooden Part-1   1000.0     50000.0   1200.0     60000.0
1  MP1   Metal Part-1    500.0      5000.0      0.0         0.0
2  GL1        Glass-1    100.0      2500.0     50.0      1250.0
3  MP2   Metal Part-2      0.0         0.0    300.0      3000.0
4  GL2        Glass-2      0.0         0.0    200.0      5000.0
另一个想法是:

您可以使用外部联接,然后将缺少的值替换为
0

df = df1.merge(df2, on=['code','description'], how='outer').fillna(0)
print (df)
v  code    description  qty_jan  amount_jan  qty_feb  amount_feb
0  WP1  Wooden Part-1   1000.0     50000.0   1200.0     60000.0
1  MP1   Metal Part-1    500.0      5000.0      0.0         0.0
2  GL1        Glass-1    100.0      2500.0     50.0      1250.0
3  MP2   Metal Part-2      0.0         0.0    300.0      3000.0
4  GL2        Glass-2      0.0         0.0    200.0      5000.0
另一个想法是:


那么样本数据中是否没有重复的行?是否也可以使用重复的行创建?因此示例数据中没有重复的行?也可以用重复的行创建吗?答案很快。非常感谢。非常快的回答。非常感谢。