如何解决当某些项目相关时,尝试查找唯一的键/值组合
尽我所能,总结标题中的问题:(
我收到一个.csv,其中包含大量具有各种项目和值的记录。这些记录将基于对这个问题并不是很重要的各种原因合并为一小组新记录。我想在这些现有记录中找到每个项目的所有唯一值,以便将它们放置在新的合并记录中。
此.csv如下所示:
+-----------+----------+------+------------+-------------------------------------------------------------------------------------------------------+
| cur_id | new_id | item | item_group | item_value |
+-----------+----------+------+------------+-------------------------------------------------------------------------------------------------------+
| 210076011 | 21077033 | 8100 | 8100 | 1\n2\n9\n5\n12\n10\n999\n1224 |
| 210076011 | 21077033 | 8105 | 8100 | 1460000002\n1460000001\n1460000003\n1200\n2100470010\n1416\n1460000004\n11352 |
| 210076010 | 21077033 | 8100 | 8100 | 1\n2\n9\n5\n12\n10\n999\n1224 |
| 210076010 | 21077033 | 8105 | 8100 | 1460000002\n1460000001\n1460000003\n1200\n1460000006\n1416\n1460000004\n11352 |
| 210076013 | 21077033 | 8100 | 8100 | 1\n2\n9\n5\n12\n10\n999\n1224\n1222\n1225 |
| 210076013 | 21077033 | 8105 | 8100 | 1460000002\n1460000001\n1460000003\n1200\n1460000006\n1416\n1460000004\n11352\n1230000004\n1230000006 |
+-----------+----------+------+------------+-------------------------------------------------------------------------------------------------------+
除了带有回车符的可怕格式外,其中一些还彼此相关。我已经在item_group列中指出了这一点。因此,项目8100和8105是相关的,并且是8100组的一部分。我想最好将它们视为表格形式
+------+------------+
| 8100 | 8105 |
+------+------------+
| 1 | 1460000002 |
| 2 | 1460000001 |
| 9 | 1460000003 |
| 5 | 1200 |
| 12 | 2100470010 |
| 10 | 1416 |
| 999 | 1460000004 |
| 1224 | 11352 |
| 1 | 1460000002 |
| 2 | 1460000001 |
| 9 | 1460000003 |
| 5 | 1200 |
| 12 | 1460000006 |
| 10 | 1416 |
| 999 | 1460000004 |
| 1224 | 11352 |
| 1 | 1460000002 |
| 9 | 1460000001 |
| 5 | 1460000003 |
| 12 | 1200 |
| 10 | 1460000006 |
| 999 | 1416 |
| 1224 | 1460000004 |
| 1222 | 11352 |
| 1225 | 1230000004 |
+------+------------+
唯一的组合是
+------+------------+
| 8100 | 8105 |
+------+------------+
| 1 | 1460000002 |
| 2 | 1460000001 |
| 9 | 1460000003 |
| 5 | 1200 |
| 12 | 2100470010 |
| 10 | 1416 |
| 999 | 1460000004 |
| 1224 | 11352 |
| 12 | 1460000006 |
| 9 | 1460000001 |
| 5 | 1460000003 |
| 12 | 1200 |
| 10 | 1460000006 |
| 999 | 1416 |
| 1224 | 1460000004 |
| 1222 | 11352 |
| 1225 | 1230000004 |
+------+------------+
到目前为止,我在python中所拥有的就是将其加载到df中,用'\ n'分隔项值列,按item_group将值分组,然后将其放入称为属性的嵌套字典中
def create_list_3(filename):
df = pd.read_csv(filename)
df2 = tidy_split(df,'item_value','\n',keep=False)
df2["item_value"].fillna("",inplace = True)
dict_list = list()
groupby_list = ['new_id','item_group']
for g,d in df2.groupby(groupby_list):
group = dict(zip(groupby_list,g))
att_list = list()
for _,data in d.iterrows():
data = data.drop(labels=groupby_list)
att_list.append(data.to_dict())
group['attributes'] = att_list
dict_list.append(group)
return dict_list
def tidy_split(df,column,sep='|',keep=False):
indexes = list()
new_values = list()
df = df.dropna(subset=[column])
for i,presplit in enumerate(df[column].astype(str)):
values = presplit.split(sep)
if keep and len(values) > 1:
indexes.append(i)
new_values.append(presplit)
for value in values:
indexes.append(i)
new_values.append(value)
new_df = df.iloc[indexes,:].copy()
new_df[column] = new_values
return new_df
create_list_3('r_sample.csv')
收益
[{'new_id': 21077033,'item_group': 8100,'attributes': [{'cur_id': 210076011,'item': 8100,'item_value': '1'},{'cur_id': 210076011,'item_value': '2'},'item_value': '9'},'item_value': '5'},'item_value': '12'},'item_value': '10'},'item_value': '999'},'item_value': '1224'},'item': 8105,'item_value': '1460000002'},'item_value': '1460000001'},'item_value': '1460000003'},'item_value': '1200'},'item_value': '2100470010'},'item_value': '1416'},'item_value': '1460000004'},'item_value': '11352'},{'cur_id': 210076010,'item_value': '1460000006'},{'cur_id': 210076013,'item_value': '1222'},'item_value': '1225'},'item_value': '1230000004'},'item_value': '1230000006'}]}]
我真正想要的是
[{'new_id': 21077033,'attributes': [
{'item': 8100,'item_value': 1},{'item': 8105,'item_value': 1460000002},{'item': 8100,'item_value': 2},'item_value': 1460000001},'item_value': 9},'item_value': 1460000003},'item_value': 5},'item_value': 1200},'item_value': 12},'item_value': 2100470010},'item_value': 10},'item_value': 1416},'item_value': 999},'item_value': 1460000004},'item_value': 1224},'item_value': 11352},'item_value': 1460000006},'item_value': 1222},'item_value': 1225},'item_value': 1230000004}
]}]
我陷入困境的是如何考虑这些相关的项目并检查这些组合。我甚至在正确的道路上吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。