我使用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)
我希望将这三个字典合并在一起,并从CSV文件中返回每行数据的数据。但是,我需要order
对象是唯一的。我已经能够使用unpacking generalizations合并返回的字典。例如{**x, **y}
。如果我使用嵌套的for循环,那么我能够以这种方式完成合并字典的唯一方法;这会阻止我返回唯一的订单。
最好的方法是将我的字典合并到一个字典中,这样我就可以循环并返回具有唯一顺序的唯一数据?
使用更正进行编辑
以下是我的原始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循环解决这个问题的原因是,需要将所有需要的输出返回一个字典,然后通过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)
这将返回上面列出的所需输出。
发布于 2018-05-29 07:17:25
你可以在你的原始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()
https://stackoverflow.com/questions/50574173
复制相似问题