[英]Pandas dataframe: group by some columns and create lists from the remaining ones
我的示例數據框包含:
id1 | id2 | 文本 | 元數據 |
---|---|---|---|
惠普:001 | 做:001 | 文本1 | 元數據_1 |
惠普:001 | 做:001 | text_2 | 元數據_2 |
我正在嘗試生成一個按id1
和id2
分組的新表,其中text
和metadata
將包含來自其各自記錄的術語列表:
id1 | id2 | 文本 | 元數據 |
---|---|---|---|
惠普:001 | 做:001 | ['text_1','text_2'] | ['元數據_1','元數據_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
將結果解析為數據幀,但我不明白為什么我會得到一個列名列表而不是它們的內容作為結果。
更改適用於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]
使用df.groupby(["id1", "id2"]).apply(list)
,您可以將其視為df.groupby(["id1", "id2"]).apply(lambda group: list(group))
其中group
是一個 DataFrame。 list(DataFrame)
返回列名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.