[英]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
,其中parentId
是id_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
本身的名字。 但是,它应该采用parentId
为id_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.