【问题标题】:Merging unequal dataframe with all values将不相等的数据框与所有值合并
【发布时间】:2019-08-30 07:15:00
【问题描述】:

我想在某些条件下合并两个长度不等的数据框。数据帧的详细信息是:

  1. 数据框 A 包含大约 1000 行
  2. 数据框 B 包含大约 50 行

两个数据框中的字段类似 在答:

A_Name, A_count, A_Normalised value, A_year

数据框 A:

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

现在,我想根据年份合并两个数据框,但我不想重复值。 即,如果在 Dataframe A 中,假设 2018 年包含 50 个值,而在 Dataframe B 中,对于 2018 年,包含 5 个值。那么 2018 年的总行数应该是 50,输出应该是这样的:

【问题讨论】:

  • 你已经展示了输出,但相应的输入也会很有帮助。
  • 仅在一年内加入将创建多对多关系,其中任一数据框中的每一行都将匹配联接两侧的多行并乘以您的结果。您将需要加入多个条件以删除重复项

标签: python pandas dataframe jupyter-notebook


【解决方案1】:

GroupBy.cumcount 用于计数器列,然后将DataFrame.mergerename 列用于避免具有相同内容的列A_YearB_Year,如果在left_onright_on 中使用参数merge

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  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2018-07-07
    • 2015-06-28
    • 2021-04-04
    • 2021-03-30
    • 2023-01-10
    相关资源
    最近更新 更多