[英]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
存在重复问题。
在示例中有重复的值100363
和100594
。
样品:
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:
如果数据帧df2
在NR
没有重复数据,请使用:
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.