Как найти среднее значение списка элементов, встроенных в столбец фрейма данных Pandas - PullRequest
0 голосов
/ 23 апреля 2020

Я занимаюсь очисткой фрейма данных, и один конкретный столбец содержит значения, которые состоят из списков. Я пытаюсь найти среднее из этих списков и обновить существующий столбец с int, сохраняя при этом индексы. Я могу успешно и эффективно преобразовать эти значения в список, но в процессе я теряю значения индекса. Код, который я написал ниже, слишком сложен для выполнения. Есть ли более простой код, который будет работать?

data: https://docs.google.com/spreadsheets/d/1Od7AhXn9OwLO-SryT--erqOQl_NNAGNuY4QPSJBbI18/edit?usp=sharing

def Average(lst):
    sum1 = 0
    average = 0
    if len(x) == 1:
        for obj in x:
            sum1 = int(obj)

    if len(x)>1:
        for year in x:
            sum1 += int(year)
        average = sum1/len(x)

    return mean(average) 

hello = hello[hello.apply([lambda x: mean(x) for x in hello])]

Вот l oop, который я использовал для преобразования значений в список :

df_list1 = []

for x in hello:
        sum1 = 0
        average = 0
        if len(x) == 1:
            for obj in x:
                df_list1.append(int(obj))

        if len(x)>1:
            for year in x:
                sum1 += int(year)
                average = sum1/len(x)
            df_list1.append(int(average))

1 Ответ

0 голосов
/ 23 апреля 2020

Используйте apply и np.mean.

import numpy as np

df = pd.DataFrame(data={'listcol': [np.random.randint(1, 10, 5) for _ in range(3)]}, index=['a', 'b', 'c'])

# np.mean will return NaN on empty list
df['listcol'] = df['listcol'].fillna([])

# can use this if all elements in lists are numeric
df['listcol'] = df['listcol'].apply(lambda x: np.mean(x))

# use this instead if list has numbers stored as strings
df['listcol'] = df['listcol'].apply(lambda x: np.mean([int(i) for i in x])) 

Выход

>>>df
   listcol
a      5.0
b      5.2
c      4.4
...