Преобразуйте все строки фрейма данных в массивы и перейдите к функции - PullRequest
1 голос
/ 08 апреля 2019

Я хочу преобразовать все строки фрейма данных в массивы и использовать массивы в функции. Функция должна создать новый столбец с результатами функции для каждой строки.

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 ]

3 голосов
/ 08 апреля 2019

Вы можете рассчитывать без итерации по строкам:

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
0 голосов
/ 08 апреля 2019

вы можете использовать во встроенных .iloc и .to_list() методах, чтобы получить строки в виде массива и передать их вашему методу.

rows = df.shape[0]
for i in range(rows):
    row_lst = df.iloc[i].to_list()
    print(harmonicMean(row_lst))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...