Python 将不等数据帧与所有值合并
我想在某些条件下合并两个长度不等的数据帧。数据帧的详细信息如下:Python 将不等数据帧与所有值合并,python,pandas,dataframe,jupyter-notebook,Python,Pandas,Dataframe,Jupyter Notebook,我想在某些条件下合并两个长度不等的数据帧。数据帧的详细信息如下: 数据帧A包含大约1000行 数据框B包含大约50行 两个数据框中的字段类似于 以一种方式: 数据帧A: print (df1) A_Organisation A_count A_Normalised A_Year 0 ABC 654 34545 2018 1 DEF 565 54564 2018 2
print (df1)
A_Organisation A_count A_Normalised A_Year
0 ABC 654 34545 2018
1 DEF 565 54564 2018
2 GHI 565 34546 2018
3 QWE 790 3945 2018
4 DSO 788 1561 2017
5 DFB 34579 546 2017
6 HHS 56 31651 2017
7 FDGH 98 156 2016
8 DSFH 51651 153156 2016
9 KBIU 151 1561 2015
10 SDF 165 6513 2015
对于数据帧B:
B_Name, B_count, B_Normalised value, B_year
print (df2)
B_Organisation B_count B_Normalised B_Year
0 MNO 123 432 2018
1 MNO 133 234 2018
2 MNO 8743 484 2017
3 MNO 1335 1512 2015
4 MNO 456 3454 2014
5 MNO 345 234 2014
现在,我想基于年份合并这两个数据帧,但我不想重复值。
i、 e.如果2018年的数据帧A中包含50个值,2018年的数据帧B中包含5个值。那么2018年的总行数应该是50,输出应该是:
用于计数器列,然后使用重命名
列避免列具有相同内容A\u年和B\u年
如果在合并中使用参数left\u on
和right\u on
:
df1['g'] = df1.groupby('A_Year').cumcount()
df2['g'] = df2.groupby('B_Year').cumcount()
df = (df1.rename(columns={'A_Year':'Year'})
.merge(df2.rename(columns={'B_Year':'Year'}), on=['Year','g'], how='outer')
.drop('g', axis=1))
用于计数器列,然后使用rename
columns以避免具有相同内容的列A\u Year
和B\u Year
,如果在合并中使用参数left\u on
和right\u on
:
df1['g'] = df1.groupby('A_Year').cumcount()
df2['g'] = df2.groupby('B_Year').cumcount()
df = (df1.rename(columns={'A_Year':'Year'})
.merge(df2.rename(columns={'B_Year':'Year'}), on=['Year','g'], how='outer')
.drop('g', axis=1))
您已经显示了输出,但相应的输入也会很有帮助。按年份联接将创建一个多对多关系,其中任一数据帧中的每一行将匹配联接两侧的多行,并将结果相乘。您需要根据多个条件进行联接以删除重复项您已经显示了输出,但相应的输入也会非常有用。仅按年份联接将创建一个多对多关系,其中任一数据帧中的每一行都将匹配联接两侧的多行,并将结果相乘。您需要加入多个条件以删除重复项
print (df)
A_Organisation A_count A_Normalised Year B_Organisation B_count \
0 ABC 654.0 34545.0 2018 MNO 123.0
1 DEF 565.0 54564.0 2018 MNO 133.0
2 GHI 565.0 34546.0 2018 NaN NaN
3 QWE 790.0 3945.0 2018 NaN NaN
4 DSO 788.0 1561.0 2017 MNO 8743.0
5 DFB 34579.0 546.0 2017 NaN NaN
6 HHS 56.0 31651.0 2017 NaN NaN
7 FDGH 98.0 156.0 2016 NaN NaN
8 DSFH 51651.0 153156.0 2016 NaN NaN
9 KBIU 151.0 1561.0 2015 MNO 1335.0
10 SDF 165.0 6513.0 2015 NaN NaN
11 NaN NaN NaN 2014 MNO 456.0
12 NaN NaN NaN 2014 MNO 345.0
B_Normalised
0 432.0
1 234.0
2 NaN
3 NaN
4 484.0
5 NaN
6 NaN
7 NaN
8 NaN
9 1512.0
10 NaN
11 3454.0
12 234.0