簡體   English   中英

將 pandas 系列中的字典列表解析為列

[英]Parse list of dicts from a pandas Series into columns

我有一個包含字典列表的 pandas 系列。 我想用某些條件解析字典的內容並將結果存儲到新列中。

以下是一些要處理的數據:


import pandas as pd

df = pd.DataFrame({'d': [[{'br': 1, 'ba': 1, 'r': 100},
                         {'ba': 1, 'r': 80},
                         {'br': 2, 'ba': 1, 'r': 150},
                         {'br': 1, 'ba': 1, 'r': 90}],
                        [{'br': 1, 'ba': 1, 'r': 100},
                         {'ba': 1, 'r': 80},
                         {'br': 2, 'ba': 1, 'r': 150}]],

                   'id': ['xxas', 'yxas'],

                   'name': [A, B]

                 }) 
 

我想用一些條件邏輯來解析每本字典的內容。 檢查列表中的每個字典,並將列命名為鍵brba 獲取r keyvalue作為列值分配。 如果未找到密鑰, br在此示例中,將0指定為值。 預計 output:

id     br  ba  r     name
xxas   1   0   100   A
xxas   0   1   80    A
xxas   2   1   150   A
xxas   1   1   90    A
yxas   1   1   100   B
yxas   0   1   80    B
yxas   2   1   150   B

從您的DataFrame中,我們首先將列idname設置為索引,如下所示:

df = df.set_index(['id', 'name'])

然后,我們可以使用concat來獲得預期的結果:

pd.concat(df.d.apply(pd.DataFrame).tolist(), keys=df.index).reset_index(level=[0, 1]).reset_index(drop=True).fillna(0).rename(columns={'level_0': 'id', 'level_1': 'name'})

Output:

    id      name    br      ba  r
0   xxas    A       1.0     1   100
1   xxas    A       0.0     1   80
2   xxas    A       2.0     1   150
3   xxas    A       1.0     1   90
4   yxas    B       1.0     1   100
5   yxas    B       0.0     1   80
6   yxas    B       2.0     1   150

暫無
暫無

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

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