gpt4 book ai didi

python - 如何将列除以数据框中具有相同 id 的行数?

转载 作者:行者123 更新时间:2023-12-05 01:59:42 27 4
gpt4 key购买 nike

我有一个如下所示的 DataFrame:

<表类="s-表"><头>编号价格<正文>130013001300240024003100

我的目标是将每次观察的价格除以具有相同 ID 号的行数。预期的输出将是:

<表类="s-表"><头>编号价格<正文>110011001100220022003100

但是,我在寻找执行此操作的最优化方式时遇到了一些问题。我确实设法使用下面的代码做到了这一点,但它需要超过 5 分钟才能运行(因为我有大约 20 万次观察):

# For each row in the dataset, get the number of rows with the same Id and store them in a list
sum_of_each_id=[]
for i in df['Id'].to_numpy():
sum_of_each_id.append(len(df[df['Id']==i]))

# Creating an auxiliar column in the dataframe, with the number of rows associated to each Id
df['auxiliar']=sum_of_each_id

# Dividing the price by the number of rows with the same Id
df['Price']=df['Price']/df['auxiliar']

你能告诉我最好的方法是什么吗?

最佳答案

尝试使用 groupbytransform

  • 使用 groupby('Id') 根据 id 进行分组
  • 使用 `transform('count') 获取每行中一组值的计数
  • df["Price] 除以包含计数的序列。
df = pd.DataFrame({"Id":[1,1,1,2,2,3],"Price":[300,300,300,400,400,100]})

df["new_Price"] = (df["Price"]/df.groupby("Id")["Price"].transform("count")).astype('int')

print(df)

Id Price new_Price
0 1 300 100
1 1 300 100
2 1 300 100
3 2 400 200
4 2 400 200
5 3 100 100

关于python - 如何将列除以数据框中具有相同 id 的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67670569/

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