如何解决在熊猫数据框中合并多个可能重复的字符串列
我正在尝试在我们的两个系统之间迁移数据,一个系统的描述分为多列,而目标系统只有一列。所以我需要将这 5 列合并为一列,同时删除可能的重复项。
到目前为止,这是我所拥有的,它有效,但有没有办法让它更快?现在,遍历我正在处理的 13,000 条记录需要相当长的时间。 (一旦我将来从其他系统添加更多数据,数据很容易达到 30,000 条记录,因此每一秒都很重要)
columns = [
"Item.Asset Description","Item.Fixed Asset Sales Description","Item.Item Description","Item.Purchase Description","Item.Sales Description"
]
df[columns] = df[columns].replace(np.nan,"")
description_col = []
for i,r in df.iterrows():
descriptions = []
for col in columns:
if r[col] not in descriptions:
descriptions.append(r[col])
description = ""
for d in descriptions:
description += "\n" + d
description = description.strip()
description_col.append(description)
df["Description"] = description_col
所以我想我的问题真的可以归结为,有没有更好的方法来做到这一点?
编辑: 澄清一下,我必须确保数据在两个系统中都得到维护,但是记录的顺序并不重要,只要每条记录的数据保存在一起即可。
此外,合并描述列的顺序并不重要,因为大多数记录一次不会包含超过 3 个的任何数据。 (大多数数据正好在 1 中,但也有相当多的数据在 2 或 3 列中)
编辑2: 根据要求,这里提供一些示例数据:
columns = [
"Item.Name","Item.Asset Description","Item.Sales Description","Other Data"
]
df = pd.DataFrame([
["Name","There is some text here.","","Some more here.","Other Data"],["Name","Some over here.","Some here as well.","Some here.","And some here.","And here.","Other Data"]
],columns=columns)
解决方法
您可以使用pandas.unique()
:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.unique.html
这是我的实现,我用空格替换了你的 \n
字符,这样表格就会打印出来而没有大的间隙,只需在你的代码中替换它。
import pandas as pd
import numpy as np
columns = [
"Item.Asset Description","Item.Fixed Asset Sales Description","Item.Item Description","Item.Purchase Description","Item.Sales Description"
]
rows = [
['mary','had','a','little','lamb'],['little','lamb',np.nan],['mary',['whose','fleece','was','white','as'],['snow',np.nan,np.nan]
]
df = pd.DataFrame(data=rows,columns=columns).fillna('')
def merge_row(row):
return ' '.join(pd.unique(row)).strip()
df['Description'] = list(map(merge_row,df.loc[:,columns].values))
Item.Asset 描述 | Item.Fixed Asset Sales Description | Item.Item 描述 | Item.Purchase Description | Item.Sales Description | 描述 | |
---|---|---|---|---|---|---|
0 | 玛丽 | 有 | a | 小 | 羊肉 | 玛丽吃了一只小羊 |
1 | 小 | 羊肉 | 小 | 羊肉 | 小羊 | |
2 | 玛丽 | 有 | a | 小 | 羊肉 | 玛丽吃了一只小羊 |
3 | 谁的 | 抓绒 | 是 | 白色 | as | 他的羊毛是白色的 |
4 | 雪 | 雪 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。