【发布时间】:2021-04-12 00:28:45
【问题描述】:
我正在尝试在此数据框中创建一个新列。数据集对于每个 PERSON 都有多条记录,因为每条记录都是不同的帐户。新列值应该是 TYPE 列中每个 PERSON 的值的组合。例如,如果 John Doe 有四个帐户,则新列中他的 nae 旁边的值应该是 TYPE 中值的串联。下面是最终数据框的示例。提前致谢。
【问题讨论】:
标签: python concatenation
我正在尝试在此数据框中创建一个新列。数据集对于每个 PERSON 都有多条记录,因为每条记录都是不同的帐户。新列值应该是 TYPE 列中每个 PERSON 的值的组合。例如,如果 John Doe 有四个帐户,则新列中他的 nae 旁边的值应该是 TYPE 中值的串联。下面是最终数据框的示例。提前致谢。
【问题讨论】:
标签: python concatenation
您可以用两行代码完成此操作(首先是代码,然后是解释):
代码:
in: name_types = df.pivot_table(index='Name', values='AccountType', aggfunc=set)
out:
AccountType
Name
Jane Doe {D}
John Doe {L, W, D}
Larry Wild {L, D}
Patti Shortcake {L, W}
in: df['ClientType'] = df['Name'].apply(lambda x: name_types.loc[x]['AccountType'])
说明:
数据透视表获取每个单独名称的所有 AccountType,并使用“set”聚合函数删除所有重复项。
apply 函数然后遍历主数据框中的每个“名称”,查找与 name_typed 中的每个关联的 AccountType,并将其添加到主数据框中的新列 ClientType。
你就完成了!
附录: 如果您需要将列作为字符串而不是集合,请使用:
in: def to_string(the_set):
string = ''
for item in the_set:
string += item
return string
in: df['ClientType'] = df['ClientType'].apply(to_string)
in: df.head()
out:
Name AccountType ClientType
0 Jane Doe D D
1 John Doe D LDW
2 John Doe D LDW
3 John Doe L LDW
4 John Doe D LDW
【讨论】: