繁体   English   中英

将两个数据帧与熊猫合并后的行数不同

[英]different amount of rows after merging two dataframes with pandas

我有一个数据EQ_NR ,我通过EQ_NR列将它与另一个数据EQ_NR

这是第一个数据帧的结构:(行:320816)

这是第二个:(行:135818)

合并后,我通过“EQ_NR”的值将一个带有“TA”的数据帧从第二个数据帧添加到第一个数据帧。

问题是我在合并前有 320816 行,在合并两个数据帧后有 320871 行。 比基本数据多 55 行会发生什么?

我需要数据进行一些计算,而另外 55 行会扭曲计算结果......

加入列NR存在重复问题。

在示例中有重复的值100363100594

样品:

import pandas as pd

df1 = pd.DataFrame({'NR':[100363,100363,100363, 100365],
                   'B':[4,5,6,7],
                   'C':[7,8,9,7]})

print (df1)
   B  C       NR
0  4  7  100363
1  5  8  100363
2  6  9  100363
3  7  7  100365

df2 = pd.DataFrame({'NR':[1001380363,1001380363,1001380363,1001380363],
                   'B':[4,5,6,8],
                   'C':[7,8,9,3]})

print (df2)
   B  C       EQ_NR
0  4  7  1001380363
1  5  8  1001380363
2  6  9  1001380363
3  8  3  1001380363
print (pd.merge(df1, df2, on=['NR']))
    B_x  C_x       NR  B_y  C_y
0     4    7  100363    4    7
1     4    7  100363    5    8
2     4    7  100363    6    9
3     4    7  100363    8    3
4     5    8  100363    4    7
5     5    8  100363    5    8
6     5    8  100363    6    9
7     5    8  100363    8    3
8     6    9  100363    4    7
9     6    9  100363    5    8
10    6    9  100363    6    9
11    6    9  100363    8    3

编辑1:

如果数据帧df2NR没有重复数据,请使用:

print (df1)  
  ART     DAT   LEIST_DAT    KD BW       NR MATERIAL  \
0    AF  2015-12-10  2015-12-31  P     B  100363   S   
1    AF  2015-12-10  2015-12-31  P     B  100363   S   
2    AF  2015-12-10  2015-12-31  P     B  100363   S   
3    AF  2015-12-10  2015-12-31  P     B  100363   S   
4    AF  2015-12-10  2015-12-31  P     B  100363   S   
5    AF  2015-12-10  2015-12-31  P     B  100363   S   
6    AF  2015-12-10  2015-12-31  P     B  100363   S   
7    AF  2015-12-10  2015-12-31  P     E  100594   S   
8    AF  2015-12-10  2015-12-31  P     B  100594   S   

   KW_WERT  NETTO_EURO          TA  
0    0.150       18.90         H  
1    0.145       18.27         H  
2    0.145       18.27         NaN  
3    0.150       18.90         H  
4    0.150       18.90         NaN  
5    0.145       18.27         H  
6    0.150       18.90         H  
7    3.011      252.92         AN  
8    3.412      429.91         AN  

print (df2)
       NR         TA
0  100363  Sonstiges
1  100704  Sonstiges
2  100823  Sonstiges
3  100985  Sonstiges
4  100774          D
5  100790          D
6  100097        NaN
print (pd.merge(df1, df2, on=['NR'], how='left', suffixes=('','_new')))
  ART     DAT   LEIST_DAT      KD MW_BW       NR MATERIAL  \
0    F  2015-12-10  2015-12-31  P     B  100363   S   
1    F  2015-12-10  2015-12-31  P     B  100363   S   
2    F  2015-12-10  2015-12-31  P     B  100363   S   
3    F  2015-12-10  2015-12-31  P     B  100363   S   
4    F  2015-12-10  2015-12-31  P     B  100363   S   
5    F  2015-12-10  2015-12-31  P     B  100363   S   
6    F  2015-12-10  2015-12-31  P     B  100363   S   
7    F  2015-12-10  2015-12-31  P     E  100594   S   
8    F  2015-12-10  2015-12-31  P     B  100594   S   

   KW_WERT  NETTO_EURO          TA     TA_new  
0    0.150       18.90           H  Sonstiges  
1    0.145       18.27           H  Sonstiges  
2    0.145       18.27         NaN  Sonstiges  
3    0.150       18.90           H  Sonstiges  
4    0.150       18.90         NaN  Sonstiges  
5    0.145       18.27           H  Sonstiges  
6    0.150       18.90           H  Sonstiges  
7    3.011      252.92          AN        NaN  
8    3.412      429.91          AN        NaN  

如果只想添加一列,可以使用map()方法:

In [290]: df1['TA2'] = df1.EQ_NR.map(df2.set_index('EQ_NR').TA)

In [291]: df1
Out[291]:
  FAK_ART     FAK_DAT   LEIST_DAT      KD_CRM MW_BW       EQ_NR MATERIAL  KW_WERT  NETTO_EURO          TA  TA2
0    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.150       18.90         SDH  AAA
1    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.145       18.27         SDH  AAA
2    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.145       18.27         NaN  AAA
3    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.150       18.90         SDH  AAA
4    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.150       18.90         NaN  AAA
5    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.145       18.27         SDH  AAA
6    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380363   B60ETS    0.150       18.90         SDH  AAA
7    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     E  1001380594   B60ETS    3.011      252.92  DSLAM/MSAN  NaN
8    ZPAF  2015-12-10  2015-12-31  T-HOME ICP     B  1001380594   B60ETS    3.412      429.91  DSLAM/MSAN  NaN

其中 df2:

In [288]: df2
Out[288]:
        EQ_NR   TA
0  1001380363  AAA

注意: df2.EQ_NR必须是唯一的,否则你会得到InvalidIndexError: Reindexing only valid with uniquely valued Index objects异常。 df1.EQ_NR可能有重复...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM