有没有办法从三个独立的for循环合并三个dicts?

时间:2018-05-28 22:40:39

标签: python python-3.x pandas dictionary

我正在使用Pandas根据我的CSV文件的三个单独列中的数据创建三个列表。我的名单是:

order_list = df['order'][:10].tolist()) 
user_id_list = df['user_id'][:10].tolist())
company_id_list = df['company_id'][:10].tolist())

在我的create_order()函数中,我循环遍历每个列表并使用enumerate()将项目添加到三个单独的序列中。例如:

def create_order(orders, users, companies):

    for index, order in enumerate(orders):
        x = {
            'name': order,
        }
    for index, user_id in enumerate(users):
        y = {
            'user': user_id,
        }
    for index, company_id in enumerate(companies):
        z = {
            'company': company_id,
        }

if __name__ == '__main__':
    create_order(order_list, user_id_list, company_id_list)

我想将所有三个dicts合并在一起,并从我的CSV文件中返回每行数据的数据。但是,我需要order个对象是唯一的。我已经能够合并使用unpacking generalizations返回的dicts。例如{**x, **y}。如果我创建嵌套的for循环,我可以用这种方式完成合并dicts的唯一方法;这使我无法返回唯一的订单。

将字典合并到一个字典中的最佳方法是什么,以便循环并返回具有唯一订单的唯一数据?

编辑w /更正

这是我原来的DF输出:

     company_id                 user_id          order
  0         111                     222           order 1
  1         111                     222           order 1
  2         111                     222           order 1
  3         111                     222           order 2
  4         111                     222           order 2
  5         111                     222           order 3

以下是我所需输出的示例,其中包含所有唯一订单:

company_id   user_id               order
       111       222             order 1
       111       222             order 2
       111       222             order 3

尝试解决for循环问题的原因是需要让所有所需的输出返回一个dict,以通过Google DFP API导入数据库。

由于@MeHdi的指导,下面是具有所需输出的工作代码。

df = pd.read_csv('order_data.csv')

order_list = df['order'].tolist()
user_id_list = df['user_id'].tolist()
company_id_list = df['company_id']].tolist()

for x in company_id_list:
    company_id = int(x)

    df = pd.DataFrame(
        {
            'name': order_list,
            'userId': user_id_list,
            'companyId': company_id
        }
    )

 list_obj = df.reindex(columns=['companyId', 'userId', 'name']).drop_duplicates()

 records = list_obj.to_dict('records')
 print(records)

这将返回上面列出的所需输出。

1 个答案:

答案 0 :(得分:4)

您可以使用原始DataFrame。在DataFrame上使用reindex和drop_duplicates函数来获得所需的结果。

df = pd.DataFrame({'order':['order1', 'order2', 'order3', 'order3'], 'user_id':[222, 222, 222, 222], 'company_id':[111, 111, 111, 111], 'column_d':['a', 'b', 'c', 'd']})

print(df)

df.reindex(columns=['company_id', 'user_id', 'order']).drop_duplicates()