Python:Pandas数据帧合并重复项,用于以';1';
这真的很奇怪,因为只有合并两个以“1”开头的数据帧时才会发生这种情况Python:Pandas数据帧合并重复项,用于以';1';,python,pandas,dataframe,Python,Pandas,Dataframe,这真的很奇怪,因为只有合并两个以“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 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]
但当我合并这两个dataframe时,以“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”开头的数字有一些问题
如何使其只能正确合并?有一个问题,您在
Stock
列中有重复的值,重复值以1
开头
您可以通过以下方式进行检查:
print (df_mo[df_mo['Stock'].duplicated(keep=False)])
print (df_active[df_active['Stock'].duplicated(keep=False)])
解决方案是删除重复项。例如:
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
在
Stock
列中存在重复值的问题,重复值以1
开头
您可以通过以下方式进行检查:
print (df_mo[df_mo['Stock'].duplicated(keep=False)])
print (df_active[df_active['Stock'].duplicated(keep=False)])
解决方案是删除重复项。例如:
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