python - 将两个数据框与 Pandas 合并后的行数不同

标签 python pandas dataframe merge

我有一个数据框,我通过 EQ_NR 列与另一个数据框合并。

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

这是第二个:(行数:135818)

合并后,我有一个数据帧,其中“TA”从第二个数据帧添加到第一个数据帧,值为“EQ_NR”。

问题是我在合并前有 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  

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

相关文章:

python - 如何复制 Parquet 文件并将其转换为 csv

python - 创建 html 格式的报告

python - 打开文本文档时出现问题 - Unicode 错误

python - pandas:groupby 和 unstack 以创建用于分类的特征向量

python - 更改 Pandas 的轴替换 ffill

Python URLRetrieve限制速率并恢复部分下载

python - 连接 DataFrame 的日期时间并转发填充数据

python - 将非常大的 CSV 数据集加载到 Python 和 R 中,Pandas 挣扎

python - 从包含节点的 pandas Dataframe 创建邻接列表

python - pandas:检查空值:按行应用此函数我做错了什么?