Конвертировать список в int и суммировать все элементы в pandas dataframe - PullRequest
2 голосов
/ 08 апреля 2020

Очень плохо знаком с pandas, и я пытаюсь суммировать элементы списка в одном столбце для pandas кадра данных, за исключением того, что не могу найти способ сделать это

фрейм данных выглядит примерно так:

index codes 
0     [19, 19]
1     [3, 4]
2     [20, 5, 3]
3     NaN
4     [1]
5     NaN
6     [14, 2]

Я пытаюсь получить следующее:

index codes       total 
0     [19, 19]    38
1     [3, 4]      7 
2     [20, 5, 3]  28
3     NaN         0 
4     [1]         1
5     NaN         0
6     [14, 2]     16

Однако значения в кодах были получены с использованием str.findall('-(\d+)') из другого столбца, поэтому они не являются списком целых чисел

Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 3 ]

2 голосов
/ 08 апреля 2020

Я бы использовал str.extractall() вместо str.findall():

# replace orig_column with the correct column name
df['total'] = (df['orig_column'].str.extractall('-(\d+)')
                 .astype(int).sum(level=0)
                 .reindex(df.index, fill_value=0)
              )

Если вы действительно хотите использовать текущий столбец codes:

df['total'] = df['codes'].explode().astype(float).sum(level=0)

Вывод:

   index       codes  total
0      0    [19, 19]     38
1      1      [3, 4]      7
2      2  [20, 5, 3]     28
3      3         NaN      0
4      4         [1]      1
5      5         NaN      0
6      6     [14, 2]     16
1 голос
/ 08 апреля 2020

Попробуйте df['total'] = df['codes'].apply(lambda x:int(np.nansum(x))), если хотите вывод типа int.

Попробуйте df['total'] = df['codes'].apply(lambda x:np.nansum(x)) в противном случае.

0 голосов
/ 08 апреля 2020
df['total'] = (
    df.codes.apply(lambda x: sum([int(e) for e in x]) if type(x) == list else 0)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...