我想将数据帧的所有行转换为数组,然后在函数中使用数组。该函数应使用每一行的结果创建一个新列。
def harmonicMean(arr):
sum = 0;
for item in arr:
sum = sum + float(1.0/item);
print "inside" + str(float(1.0/item));
print sum;
return float(len(arr) / sum);
该函数实际上为数据帧中的每一行生成谐波均值。这些值应填充在数据框中的新列中。 (数据框还包含Nan
个值)
答案 0 :(得分:3)
您可以进行计算而无需遍历行:
df['hmean'] = df.notnull().sum(axis=1)/(1/df).sum(axis=1)
a b c d e hmean
0 4 5.0 2.0 5.0 10 4.000000
1 2 8.0 1.0 8.0 6 2.608696
2 7 NaN 1.0 1.0 8 1.763780
3 7 1.0 9.0 4.0 9 3.095823
4 8 5.0 8.0 NaN 3 5.106383
5 3 8.0 6.0 10.0 6 5.607477
6 3 7.0 3.0 9.0 9 4.846154
7 8 NaN NaN NaN 6 6.857143
8 2 4.0 1.0 5.0 2 2.040816
9 5 7.0 5.0 3.0 1 2.664975
答案 1 :(得分:0)
您可以使用内置的.iloc
和.to_list()
方法将行作为数组获取并将它们传递给您的方法。
rows = df.shape[0]
for i in range(rows):
row_lst = df.iloc[i].to_list()
print(harmonicMean(row_lst))