这真的很奇怪,因为这只会在合并两个具有Stock开头的数据帧时发生' 1'
>>> df_mo
Stock Momentum_
0 1A0 0.00
1 1A1 0.00
2 1A4 0.00
3 1B0 0.00
4 1B1 0.15
5 1B6 0.00
6 1C0 0.00
7 1C3 0.00
8 1C5 0.00
9 1D0 0.00
10 1D1 0.00
11 1D3 -0.50
12 1D4 0.00
13 1D5 0.00
14 1D8 0.00
15 40B -0.15
16 40D 0.00
17 40E 0.00
18 40F 0.00
19 40N 0.00
20 40R 0.00
21 40S 0.15
22 40T 0.15
23 40U 0.00
24 40V 0.00
25 40W 0.00
26 41A 0.00
27 41B 0.15
28 41F 0.00
29 41H 0.00
.. ... ...
757 T8JU 0.00
758 T8V 0.00
759 TQ5 0.00
760 TS0U 0.00
761 U04 0.00
762 U06 0.00
763 U09 0.00
764 U10 0.00
765 U11 0.00
766 U13 0.00
767 U14 0.00
768 U6C 0.00
769 U77 0.00
770 U96 0.00
771 U9E 0.00
772 UD1U 0.00
773 UD2 0.00
774 UV1 0.00
775 V01 0.00
776 V03 0.00
777 W05 0.00
778 Y03 0.00
779 Y06 0.00
780 Y35 0.00
781 Y45 0.00
782 Y92 0.00
783 Z25 0.00
784 Z59 0.00
785 Z74 0.00
786 Z77 0.00
[787 rows x 2 columns]
>>> df_active
Stock Active
0 1A0 0.35
1 1A1 0.35
2 1A4 -0.35
3 1B0 0.50
4 1B1 -0.35
5 1B6 -0.35
6 1C0 0.50
7 1C3 -0.35
8 1C5 0.35
9 1D0 -0.50
10 1D1 0.50
11 1D3 0.35
12 1D4 -0.50
13 1D5 0.35
14 1D8 -0.50
15 40B 0.35
16 40D -0.35
17 40E -0.50
18 40F -0.35
19 40N 0.35
20 40R 0.25
21 40S 0.50
22 40T 0.50
23 40U 0.35
24 40V 0.35
25 40W -0.35
26 41A -0.35
27 41B -0.35
28 41F 0.50
29 41H -0.50
.. ... ...
757 T8JU 0.35
758 T8V 0.35
759 TQ5 -0.50
760 TS0U 0.50
761 U04 0.50
762 U06 0.50
763 U09 -0.50
764 U10 0.50
765 U11 0.50
766 U13 -0.35
767 U14 0.50
768 U6C -0.25
769 U77 -0.25
770 U96 -0.50
771 U9E -0.50
772 UD1U 0.50
773 UD2 -0.50
774 UV1 -0.35
775 V01 -0.50
776 V03 0.50
777 W05 0.25
776 V03 0.50
778 Y03 0.20
779 Y06 -0.35
780 Y35 0.35
781 Y45 -0.25
782 Y92 0.50
783 Z25 0.50
784 Z59 0.50
785 Z74 -0.35
786 Z77 0.50
[787 rows x 2 columns]
但是当我合并这两个数据帧时,以' 1'开头的股票全部重复3次。
>>> pd.merge(df_mo,df_active,how='outer',on='Stock')
Stock Momentum_ Active
11 1A4 0.00 -0.35
0 1A0 0.00 0.35
1 1A0 0.00 0.35
2 1A0 0.00 0.35
3 1A0 0.00 0.35
4 1A1 0.00 0.35
5 1A1 0.00 0.35
6 1A1 0.00 0.35
7 1A1 0.00 0.35
8 1A4 0.00 -0.35
9 1A4 0.00 -0.35
10 1A4 0.00 -0.35
11 1A4 0.00 -0.35
12 1B0 0.00 0.50
13 1B0 0.00 0.50
14 1B0 0.00 0.50
15 1B0 0.00 0.50
16 1B1 0.15 -0.35
17 1B1 0.15 -0.35
18 1B1 0.15 -0.35
19 1B1 0.15 -0.35
20 1B6 0.00 -0.35
21 1B6 0.00 -0.35
22 1B6 0.00 -0.35
23 1B6 0.00 -0.35
24 1C0 0.00 0.50
25 1C0 0.00 0.50
26 1C0 0.00 0.50
27 1C0 0.00 0.50
28 1C3 0.00 -0.35
29 1C3 0.00 -0.35
.. ... ... ...
787 T8JU 0.00 0.35
788 T8V 0.00 0.35
789 TQ5 0.00 -0.50
790 TS0U 0.00 0.50
791 U04 0.00 0.50
792 U06 0.00 0.50
793 U09 0.00 -0.50
794 U10 0.00 0.50
795 U11 0.00 0.50
796 U13 0.00 -0.35
797 U14 0.00 0.50
798 U6C 0.00 -0.25
799 U77 0.00 -0.25
800 U96 0.00 -0.50
801 U9E 0.00 -0.50
802 UD1U 0.00 0.50
803 UD2 0.00 -0.50
804 UV1 0.00 -0.35
805 V01 0.00 -0.50
806 V03 0.00 0.50
807 W05 0.00 0.25
808 Y03 0.00 0.20
809 Y06 0.00 -0.35
810 Y35 0.00 0.35
811 Y45 0.00 -0.25
812 Y92 0.00 0.50
813 Z25 0.00 0.50
814 Z59 0.00 0.50
815 Z74 0.00 -0.35
816 Z77 0.00 0.50
[817 rows x 3 columns]
由于合并结果使其更多行。我有许多需要合并的数据帧,因此这会产生更多的行。
该代码实际上适用于数字开头的' 4'或任何其他数字或字符串。对于#1;'。
的数字开头只有一些问题如何让它只能正确合并?
答案 0 :(得分:0)
问题是Stock
列中有重复值,重复项以1
开头。
您可以通过以下方式查看:
print (df_mo[df_mo['Stock'].duplicated(keep=False)])
print (df_active[df_active['Stock'].duplicated(keep=False)])
解决方案是删除重复项。 E.g:
df_active = df_active.drop_duplicates('Stock')
df_mo= df_mo.drop_duplicates('Stock')
样品:
print (df_mo)
Stock Momentum_
0 1A0 0.0
0 1A0 0.0
0 1A0 0.0
1 1A1 0.0
2 1A4 0.0
3 1A4 0.0
print (df_active)
Stock Active
0 1A0 0.35
0 1A0 0.55
1 1A1 0.35
2 1A4 -0.35
3 1A4 0.50
df = pd.merge(df_mo,df_active,how='outer',on='Stock')
print (df)
Stock Momentum_ Active
0 1A0 0.0 0.35
1 1A0 0.0 0.55
2 1A0 0.0 0.35
3 1A0 0.0 0.55
4 1A0 0.0 0.35
5 1A0 0.0 0.55
6 1A1 0.0 0.35
7 1A4 0.0 -0.35
8 1A4 0.0 0.50
9 1A4 0.0 -0.35
10 1A4 0.0 0.50
print (df_mo[df_mo['Stock'].duplicated(keep=False)])
Stock Momentum_
0 1A0 0.0
0 1A0 0.0
0 1A0 0.0
2 1A4 0.0
3 1A4 0.0
print (df_active[df_active['Stock'].duplicated(keep=False)])
Stock Active
0 1A0 0.35
0 1A0 0.55
2 1A4 -0.35
3 1A4 0.50
df_active = df_active.drop_duplicates('Stock')
df_mo= df_mo.drop_duplicates('Stock')
df = pd.merge(df_mo,df_active,how='outer',on='Stock')
print (df)
Stock Momentum_ Active
0 1A0 0.0 0.35
1 1A1 0.0 0.35
2 1A4 0.0 -0.35