簡體   English   中英

將行分組並將行聚合到 Pandas 中的系列或字典列表中

[英]Group by and aggregate rows into list of series or dicts in Pandas

我有一個包含 700 萬行的數據框,看起來像這樣

|    | ID     | VAL1 | VAL2
|---:|:-------|:-----|:----
|  0 | QWERTY | 1    | ABC
|  1 | 123456 | 2    | ABC
|  2 | QWERTY | 3    | ABC
|  3 | QWERTY | 4    | ABC
|  4 | 123456 | 5    | ABC
df = pd.DataFrame(
    columns=("ID", "VAL1", "VAl2"),
    data=[("QWERTY", 1, "ABC"), ("123456", 2, "ABC"), ("QWERTY", 3, "ABC"), ("QWERTY", 4, "ABC"), ("123456", 5, "ABC")]
)

我想按 ID 分組或將其轉換成這樣的形狀

|    | ID     | GROUPED
|---:|:-------|:------------------------------------------------
|  0 | QWERTY | [{'ID': 'QWERTY', 'VAL1': 1, 'VAl2': 'ABC'}, {'ID': 'QWERTY', 'VAL1': 3, 'VAl2': 'ABC'}, {'ID': 'QWERTY', 'VAL1': 4, 'VAl2': 'ABC'}, ]
|  1 | 123456 | [{'ID': '123456', 'VAL1': 2, 'VAl2': 'ABC'}, {'ID': '123456', 'VAL1': 5, 'VAl2': 'ABC'}]

它應該按 ID 分組,並有一個包含與該 ID 對應的整行的列表。 列表中的行可以是 Series 或 Dict。


我試圖以這種方式做到這一點

test1 = df.groupby("ID").apply(lambda x: df.iloc[list(x.to_dict()["VAL1"].keys())])

但它擴展了行並創建了多索引,而不是列表或其他東西

              ID  VAL1 VAl2
ID
123456 1  123456     2  ABC
       4  123456     5  ABC
QWERTY 0  QWERTY     1  ABC
       2  QWERTY     3  ABC
       3  QWERTY     4  ABC

有沒有辦法用熊貓做到這一點?
不幸的是,在處理 500 萬行時,普通的 python 循環/映射非常慢。

嘗試這個

compact_df =  df.groupby('ID').apply(lambda group: group.to_dict(orient='records'))

嘗試這個:

test1 = df.groupby("ID").apply(lambda x: x.to_dict(orient='records'))

res=pd.DataFrame(test1, index=test1.index, columns=['GROUPED'])

>>> print(res)
                                                  GROUPED
ID
123456  [{'ID': '123456', 'VAL1': 2, 'VAl2': 'ABC'}, {...
QWERTY  [{'ID': 'QWERTY', 'VAL1': 1, 'VAl2': 'ABC'}, {...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM