我想根据另一列是否满足条件,对某些列值进行平均。具体而言,如果下面数据帧中的第一列小于1700,则我想在我的平均计算中包括该行从第51列中对应的值。如果第二列小于1700,则我还想将该行从第52列中的值包括在平均计算中。
因此,对于第0行,该行的新计算列为64(65和63的平均值)。对于第1行,平均值将仅为80(第51列的值),因为既不是第2列也不是第3列小于1700,因此未包括在平均计算中。
这只是一个简化的例子,因为我的实际数据帧有大约10个条件列和10个相应的平均值列。
作为潜在的复杂性,列标题是数字而不是传统的文本标签,并且不引用该列在数据帧中的顺序,因为我导入csv文件时排除了某些列。换句话说,第51列不是数据帧中的第51列。
当我运行下面的代码时,我遇到了以下错误:
ValueError: ("No axis named 1 for object type ", 'occurred at index 0')
有没有更有效的方法来编写代码并避免出现此错误?谢谢您的帮助!
因此,对于第0行,该行的新计算列为64(65和63的平均值)。对于第1行,平均值将仅为80(第51列的值),因为既不是第2列也不是第3列小于1700,因此未包括在平均计算中。
这只是一个简化的例子,因为我的实际数据帧有大约10个条件列和10个相应的平均值列。
作为潜在的复杂性,列标题是数字而不是传统的文本标签,并且不引用该列在数据帧中的顺序,因为我导入csv文件时排除了某些列。换句话说,第51列不是数据帧中的第51列。
当我运行下面的代码时,我遇到了以下错误:
ValueError: ("No axis named 1 for object type ", 'occurred at index 0')
有没有更有效的方法来编写代码并避免出现此错误?谢谢您的帮助!
import pandas as pd
import numpy as np
test_df = pd.DataFrame({1:[1600,1600,1600,1700,1800],2:[1500,2000,1400,1500,2000],
3:[2000,2000,2000,2000,2000],51:[65,80,75,80,75],52:[63,82,85,85,75],53:[83,80,75,76,78]})
test_df
1 2 3 51 52 53
0 1600 1500 2000 65 63 83
1 1600 2000 2000 80 82 80
2 1600 1400 2000 75 85 75
3 1700 1500 2000 80 85 76
4 1800 2000 2000 75 75 78
def calc_mean_based_on_conditions(row):
list_of_columns_to_average = []
for i in range(1,4):
if row[i] < 1700:
list_of_columns_to_average.append(i+50)
if not list_of_columns_to_average:
return np.nan
else:
return row[(list_of_columns_to_average)].mean(axis=1)
test_df['MeanValue'] = test_df.apply(calc_mean_based_on_conditions, axis=1)