Pandas:将分组后计算的值添加到原始 Dataframe 中的列

8hhllhi2  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(153)

我有一个panda Dataframe ,我想基于另一列('A ')向. groupby()的所有示例的新列('new')添加一个值。
目前,我正在分几个步骤进行:
1-遍历所有唯一的A列值
2-计算要添加的值(在不同列上运行函数,例如"B")
3-将我想添加到'new'的值存储在一个单独的列表中(该组中只有一个示例!)
4-压缩唯一组列表(.groupby('A').unique()
5-再次循环经过压缩的值以将它们存储在 Dataframe 中。
这是一种非常低效的方式,并且需要很长时间才能运行。
有没有一种本土Pandas的方法,可以用更少的步骤做,而且跑得更快?
示例代码:

mylist = []
df_groups = df.groupby('A')
groups = df['A'].unique()
for group in groups:
  g = df_groups.get_group(group)
  idxmin = g.index.min()
  example = g.loc[idxmin]
  mylist.append(myfunction(example['B'])
zipped = zip(groups, mylist)
df['new'] = np.nan
for group, val in zipped:
  df.loc[df['A']==group, 'new'] = val

如果能找到更好的办法,我们将不胜感激。
编辑1:
我可以只在 Dataframe 的所有行上运行myfunction,但由于它是一个繁重的函数,所以也会花费很长时间-所以我希望尽可能少地运行它(即每组运行一次)。

ma8fv8wu

ma8fv8wu1#

请试试这个,如果这是问,使用min函数在这里,你可以取代它.

import pandas as pd 

data = {
  "calories": [400, 300, 300, 400],
  "duration": [50, 40, 45, 35]
}

#load data into a DataFrame object:
df = pd.DataFrame(data)
df['min_value_duration'] = df.groupby('calories')['duration'].transform(min)

print(df)

参考:https://www.analyticsvidhya.com/blog/2020/03/understanding-transform-function-python/

相关问题