【问题标题】:Pandas dataframe: group by some columns and create lists from the remaining onesPandas 数据框:按某些列分组并从其余列创建列表
【发布时间】:2022-07-06 22:58:01
【问题描述】:

我的示例数据框包含:

id1 id2 text metadata
HP:001 DO:001 text_1 metadata_1
HP:001 DO:001 text_2 metadata_2

我正在尝试生成一个新表,按id1 和id2 分组,其中text 和metadata 将包含来自各自记录的术语列表:

id1 id2 text metadata
HP:001 DO:001 ['text_1', 'text_2'] ['metadata_1', 'metadata_2']

我尝试将 groupby 与 apply 和 reset_index 一起使用,但我得到:

df = pd.DataFrame(data={"id1": ["HP:001", "HP:001"], 
                   "id2": ["DO:001", "DO:001"], 
                   "text": ["text_1", "text_2"], 
                   "metadata": ["metadata_1", "metadata_2"]})

outcome = df.groupby(["id1", "id2"]).apply(list)

结果是:

id1     id2   
HP:001  DO:001    [id1, id2, text, metadata]
dtype: object

我可以使用reset_index 将结果解析为数据帧,但我不明白为什么我得到的是列名列表而不是其内容作为结果。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    更改适用于agg

    outcome = df.groupby(["id1", "id2"]).agg(list)#.reset_index()
    
    outcome
    Out[372]: 
                               text                  metadata
    id1    id2                                               
    HP:001 DO:001  [text_1, text_2]  [metadata_1, metadata_2]
    

    【讨论】:

      【解决方案2】:

      使用df.groupby(["id1", "id2"]).apply(list),您可以将其视为df.groupby(["id1", "id2"]).apply(lambda group: list(group)),其中group 是一个DataFrame。 list(DataFrame) 返回列名。

      【讨论】:

        猜你喜欢
        • 2018-05-01
        • 1970-01-01
        • 2021-12-13
        • 2020-04-13
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多