【发布时间】:2019-05-28 06:34:15
【问题描述】:
我想创建一个新列,显示基于多个条件的平均值。在大多数情况下,新列应计算 3 列的平均值。但是,如果 A 和 B 或 B 和 C 之间的差值大于 10,那么它应该只使用差值最小的 2 个值。
例如,如果 A = 2、B = 15 和 C= 13,则平均列应显示 14。因为 A 和 B 之间的差值大于 10,所以列应使用 B 和 C,因为它们的差值最小算出平均值。
我尝试添加额外的列来确定 A 和 B 之间以及 B 和 C 之间的差异。之后,我使用条件语句创建一个列表,该列表根据条件附加平均计算,然后将该列表添加为柱子。但是我收到错误“值的长度与索引的长度不匹配”。
这是用于创建我的数据框的代码:
df = pd.DataFrame(np.random.randint(0,20,size=(50, 3)),
columns=list('ABC'))
我寻找解决方案的尝试:
df['diff_1'] = df['A'] - df['B']
df['diff_2'] = df['B'] - df['C']
average = []
for i in df['diff_1']:
if i < -5:
average.append(df[['A','B']].mean(axis=1))
if i > 5:
average.append(df[['A','B']].mean(axis=1))
else:
average.append(df[['A','B','C']].mean(axis=1))
df['average'] = average
然后我会重复 diff_2 并删除重复项,但这给了我上述错误: “值的长度与索引的长度不匹配”。所以我想知道是否有更合适的方法。
我希望有一列显示所有三列的平均值,但 A 和 B 或 B 和 C 之间的差值大于 10 时除外。如果是这种情况,则应仅使用 2 个数字计算平均值最低的差异。
【问题讨论】:
-
这里也比较了A与C列的差异?