将数据帧的所有行转换为数组并传递给函数

时间:2019-04-08 16:09:16

标签: python pandas dataframe

我想将数据帧的所有行转换为数组,然后在函数中使用数组。该函数应使用每一行的结果创建一个新列。

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个值)

2 个答案:

答案 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))