我有一些輸入資料:
data = [('15.05.2022 12:36', 46879, 'Clinton Bill', '555-55-55', 'USA, White House', 'Cond', 'id_1', '56', 10),
('15.05.2022 12:36', 46879, 'Clinton Bill', '555-55-55', 'USA, White House', 'Cond', 'id_1', '56', 1),
('15.05.2022 12:36', 46879, 'Clinton Bill', '555-55-55', 'USA, White House', 'Lub', 'id_2', '45', 5),
('15.05.2022 13:00', 33990, 'Monika L.', '666-66-66', 'USA, Pennsylvania Av', 'Cond', 'id_1', '56', 7),
('15.05.2022 13:00', 33990, 'Monika L.', '666-66-66', 'USA, Pennsylvania Av', 'Lub', 'id_2', '45', 3),
('15.05.2022 13:00', 33990, 'Monika L.', '666-66-66', 'USA, Pennsylvania Av', 'Lub', 'id_2', '45', 9)]
行專案是:
(日期、user_id、user_name、user_phone、user_address、product_name、product_id、product_price、product_count)
我應該按 user_id 對資料進行分組,以表示有關每個UNIQUE用戶的資訊,其中相同產品的數量將增加,使用python 3腳本。
像這樣:
output_data = [('15.05.2022 12:36', 46879, 'Clinton Bill', '555-55-55', 'USA, white house', ('Con', 'id_1', '56', 11), ('Lub','id_2', '45', 5)),
('15.05.2022 13:00', 33990, 'Monika L.', '666-66-66', 'Colorado', ('Con', 'id_1', '56', 7), ('Lub', 'id_2', '45', 12))]
或者您可能會建議一些更好的方法來執行輸出資料。我將通過機器人將其發送給管理員。
uj5u.com熱心網友回復:
我認為您可以按唯一 ID 對資料進行分組,然后計算產品總和。基于此輸出,您可以輕松創建結構。
import collections
output_data = dict()
for date, user_id, user_name, user_phone, user_address, product_name, product_id, product_price, product_count in data:
if not output_data.get(user_id):
output_data[user_id] = collections.defaultdict(int)
output_data[user_id][product_id] = product_count
print(output_data)
uj5u.com熱心網友回復:
熊貓風格:
# convert your data to dataframe
df = pd.DataFrame(data, columns=columns)
columns_minus_one = list(df.columns[:-1])
df2 = df.groupby(columns_minus_one , as_index=False).sum('product_count')
輸出:

然后您可以回傳串列:
df2.values.tolist()
uj5u.com熱心網友回復:
您可以使用itertools.groupby和operator.itemgetter兩次(第一次是 groupby 客戶,第二次是 groupby 產品)以獲得所需的輸出。這是代碼。
import itertools
import operator
def my_groupby(lst, by_keys, return_keys):
getter = operator.itemgetter(*by_keys)
returner = operator.itemgetter(*return_keys)
# If the data is not sorted, sort it by by_keys to make the groupby work properly
sorted_data = sorted(lst, key=getter)
it = itertools.groupby(sorted_data, key=getter)
for key, subiter in it:
# Yield the key as list and desired columns from the data
yield list(key), [returner(item) for item in subiter]
res = my_groupby(data, by_keys=range(5), return_keys=range(5, 9))
output_data =[]
for customer in res:
prod = list(my_groupby(customer[1], by_keys=range(3), return_keys=[3]))
prod_total = list(map(lambda x: (*x[0], sum(x[1])), prod))
output_data.append(customer[0] prod_total)
print(output_data)
輸出:
[['15.05.2022 12:36', 46879, 'Clinton Bill', '555-55-55', 'USA, White House', ('Cond', 'id_1', '56', 11), ('Lub', 'id_2', '45', 5)]
['15.05.2022 13:00', 33990, 'Monika L.', '666-66-66', 'USA, Pennsylvania Av', ('Cond', 'id_1', '56', 7), ('Lub', 'id_2', '45', 12)]]
該變數res具有按客戶詳細資訊(第 0 到 5 列)以及產品詳細資訊分組的資料。
下一個回圈是按產品詳細資訊分組。prod將有產品詳細資訊和產品計數。使用該map函式計算總產品計數。計算結果附加在一個空串列中,output_data以獲得所需的輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/475036.html
標籤:python-3.x 算法 排序 聊天机器人
上一篇:在Python.h中使用C中的Pythonlib時出現分段錯誤
下一篇:替換字典串列中的專案
