假设我有以下代码
import pandas as pd
import numpy as np
flag = pd.DataFrame({'flag': [ [], ['red'], ['red, green'], ['red, blue'], ['blue'] ]})
colors_values = pd.DataFrame({'red': [1, 1, 1, 1, 1], 'green': [2, 2, 2, 2, 2], 'blue': [4, 4, 4, 4, 4]})
我有一个名为“flag”的一维 df,每行包含一个颜色列表(红色、绿色、蓝色)和另一个具有这些颜色名称的 df“colors_values”。它们的行数相同。
我的目标是使用 np.where 返回基于“flag”的“colors_values”每一行的值的平均值。输出将是这样的:
如果有更好/更快的方法来代替使用 np.where,我想知道。
最佳答案
Pandas 合并非常快,如果您允许一些加速时间,您可以进行合并/分组:
df_flag = flag.explode('flag').reset_index()
df_colors = colors_values.reset_index().melt(ignore_index=False, var_name='flag').reset_index()
df_flag = df_flag.merge(df_colors, on=['index', 'flag'], how='left')
df_grouped = df_flag.groupby(['index'])['value'].mean()
关于python - 使用 np.where 根据条件返回 df 行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75420647/