【问题标题】:dask merge fails with keyerrordask 合并失败并出现 keyerror
【发布时间】:2020-09-24 06:08:12
【问题描述】:

我有一个如下的 dask 数据框:

id  refseqno    xml
0   31110671    42  <my_xml> ...
1   34470834    6   <my_xml>...
2   35025043    19  <my_xml>...
3   37360536    7   <my_xml>...
4   44152211    10  <my_xml>...
5   45322759    15  <my_xml>..

我想在 id 上运行 group by,以便将相同的 id 组合在一起,并加入 refseqno 的值。基本上每个id 都会有多个refseqno。然后将分组的输出与原始数据帧合并,以便加入refseqnoidxml 值。但是合并失败,KeyError: 'id'

df_valid = df_output.groupby(['id']).refseqno.apply(lambda grp: ','.join(grp), meta=(('join', str)))
df_valid = df_valid.to_frame()
df_merge = dd.merge(df_output, df_valid, on=['id'], how='inner')
df_merge.compute()

另外,df_outputdf_valid 都是 dask 数据帧

<class 'dask.dataframe.core.DataFrame'>
<class 'dask.dataframe.core.DataFrame'>

请问我可以解决这个问题吗?

【问题讨论】:

    标签: python-3.x pandas dask


    【解决方案1】:

    分组后,df_valid 数据框将id 作为索引,而不是作为列,这就是合并不起作用的原因。
    针对您的问题的几个可能的解决方案:

    • df_output 数据帧上设置索引,然后执行连接:

    df_merge = df_output.set_index("id").join(df_valid, how="inner")

    • 重置df_valid 数据框上的索引,使id 成为合并的列:

    df_merge = dd.merge(df_output.reset_index(), df_valid, on=['id'], how='inner')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多