簡體   English   中英

在 dataframe 的引用列中返回值,應用/lambda function

[英]Return value in referencing column of dataframe with apply/lambda function

問題

我有以下 dataframe

p = {'parentId':['071cb2c2-d1be-4154-b6c7-a29728357ef3', 'a061e7d7-95d2-4812-87c1-24ec24fc2dd2', 'Highest Level', '071cb2c2-d1be-4154-b6c7-a29728357ef3'],
     'id_x': ['a061e7d7-95d2-4812-87c1-24ec24fc2dd2', 'd2b62e36-b243-43ac-8e45-ed3f269d50b2', '071cb2c2-d1be-4154-b6c7-a29728357ef3', 'a0e97b37-b9a1-4304-9769-b8c48cd9f184'],
    'type': ['Department', 'Department', 'Department', 'Function'], 'name': ['Sales', 'Finances', 'Management', 'Manager']}
df = pd.DataFrame(data = p)
df

| parentId                             | id_x                                 | type       | name       |
| ------------------------------------ | ------------------------------------ | ---------- | ---------- |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | Department | Sales      |
| a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | d2b62e36-b243-43ac-8e45-ed3f269d50b2 | Department | Finances   |
| Highest Level                        | 071cb2c2-d1be-4154-b6c7-a29728357ef3 | Department | Management |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a0e97b37-b9a1-4304-9769-b8c48cd9f184 | Function   | Manager    |

我嘗試創建一個 function 應該返回相應條目的name ,其中parentIdid_x並將其放在一個新列中。 使用 function 我得到以下結果:

def allocator(id_x, parent_ID, name):
    d = "no sub-dependency"
    for node in id_x:
        if node == parent_ID:
            d = name
    return d

df['Parent_name'] = df.apply(lambda x: allocator(df['id_x'], x['parentId'], x['name']), axis=1)
df

| parentId                             | id_x                                 | type       | name       | Parent_name       |
| ------------------------------------ | ------------------------------------ | ---------- | ---------- | ----------------- |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | Department | Sales      | Sales             |
| a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | d2b62e36-b243-43ac-8e45-ed3f269d50b2 | Department | Finances   | Finances          |
| Highest Level                        | 071cb2c2-d1be-4154-b6c7-a29728357ef3 | Department | Management | no sub-dependency |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a0e97b37-b9a1-4304-9769-b8c48cd9f184 | Function   | Manager    | Manager           |

預期結果

function到現在只放入對應的id_x本身的名字。 但是,它應該采用parentIdid_x的條目的name

 
| parentId                             | id_x                                 | type       | name       | Parent_name       |
| ------------------------------------ | ------------------------------------ | ---------- | ---------- | ----------------- |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | Department | Sales      | Management        |
| a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | d2b62e36-b243-43ac-8e45-ed3f269d50b2 | Department | Finances   | Sales             |
| Highest Level                        | 071cb2c2-d1be-4154-b6c7-a29728357ef3 | Department | Management | no sub-dependency |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a0e97b37-b9a1-4304-9769-b8c48cd9f184 | Function   | Manager    | Management        |

我該如何更改 function,所以它需要相關父條目的name

您可以使用.map()

mapping = dict(zip(df["id_x"], df["name"]))
df["Parent_name"] = df["parentId"].map(mapping).fillna("no sub-dependency")
print(df)

印刷:

                               parentId                                  id_x        type        name        Parent_name
0  071cb2c2-d1be-4154-b6c7-a29728357ef3  a061e7d7-95d2-4812-87c1-24ec24fc2dd2  Department       Sales         Management
1  a061e7d7-95d2-4812-87c1-24ec24fc2dd2  d2b62e36-b243-43ac-8e45-ed3f269d50b2  Department    Finances              Sales
2                         Highest Level  071cb2c2-d1be-4154-b6c7-a29728357ef3  Department  Management  no sub-dependency
3  071cb2c2-d1be-4154-b6c7-a29728357ef3  a0e97b37-b9a1-4304-9769-b8c48cd9f184    Function     Manager         Management

暫無
暫無

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

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