gpt4 book ai didi

python - 向数据集添加一列,其值由组填充

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:35 25 4
gpt4 key购买 nike

我有一个数据集,其中包含以下列:星期、商店、商品编号和价格。我还有一组唯一编号,它们等于项目编号,但顺序不同。我想根据这些唯一数字向该数据集添加新列。首先,我需要按周和商店对这个数据集进行分组。然后在特定的一周和特定的商店中,我需要找到一个等于新列名称的项目编号(来自唯一编号数组的元素)。如果没有该字段,则填空。然后我应该用这个项目编号的价格填写特定周和特定商店的所有字段。

这是我试过的一些代码,但它运行起来非常慢,因为行数非常大。

#real dataset
data2
weeks = data2['Week'].unique()

for k in range(len(Unique_number)):
for i in range(len(weeks)):
temp_array = data2.loc[data2["Week"] == weeks[i]]
stores = temp_array['Shop'].unique()
for j in range(len(stores)):
temp_array2 = temp_array.loc[data2["Shop"] == stores[j]]
price = temp_array2.loc[temp_array2["Item number"] == Unique_number[k], "Price"]
if (price.empty):
price = 0
else:
price = price.values[0]
data2.loc[(data2["Week"] == weeks[i]) & (data2["Shop"] == stores[j]),Unique_number[k]] = price

我想要这样的东西

Unique_numbers = [0,1,2,3]

dataframe before
week; shop; Item number; price
1 1 0 2
1 2 1 3
2 1 3 4
2 1 2 5
3 4 1 6
3 1 2 7



dataframe after
week; shop; Item number; price; 0; 1; 2; 3
1 1 0 2 2 0 0 0
1 2 1 3 0 3 0 0
2 1 3 4 0 0 5 4
2 1 2 5 0 0 5 4
3 4 1 6 0 6 0 0
3 1 2 7 0 0 7 0

最佳答案

设置

u = df['Item number'].to_numpy()
w = np.asarray(Unique_numbers)
g = [df.week, df.shop]

在这里使用一些广播比较(假设您所有的 price 值都大于 0)。


pd.DataFrame(
np.equal.outer(u, w) * df['price'].to_numpy()[:, None]).groupby(g).transform('max')

   0  1  2  3
0 2 0 0 0
1 0 3 0 0
2 0 0 5 4
3 0 0 5 4
4 0 6 0 0
5 0 0 7 0

关于python - 向数据集添加一列,其值由组填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com