当某些项目相关时,尝试查找唯一的键/值组合

如何解决当某些项目相关时,尝试查找唯一的键/值组合

尽我所能,总结标题中的问题:(

我收到一个.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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?