Как получить доступ к значениям из списков словаря, который является столбцом в фрейме данных в oneliner - PullRequest
0 голосов
/ 16 июня 2020

Допустим, у меня есть фрейм данных

     col1                      col2  col3
0  [{'a': 1, 'b': 1, 'c': 1}]  1     2 
1  [{'a': 2, 'b': 2, 'c': 1}]  2     3
2  [{'a': 3, 'b': 1, 'c': 2}]  4     1

Я мог бы получить отфильтрованный фрейм данных:

filtered_df = df.iloc[:,[0,2]]

возвращает

      col1                        col3
 0  [{'a': 1, 'b': 1, 'c': 1}]     2
 1  [{'a': 2, 'b': 2, 'c': 1}]     3
 2  [{'a': 3, 'b': 1, 'c': 2}]     1

Если мне нужно получить доступ к значение для 'c' в списках словаря - я потенциально могу перебирать столбец col1 отдельно и добавлять его в список / словарь. Однако я ищу способ pythoni c, чтобы получить результат, как показано ниже:

     c   col3
 0   1     2
 1   1     3
 2   2     1

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Еще одно решение с использованием df.apply:

df['c'] = df.apply(lambda x: x[0][0].get('c'), axis=1)

Вывод:

     c   col3
 0   1     2
 1   1     3
 2   2     1
1 голос
/ 16 июня 2020

Используйте индексирование по str для выбора первого списка, а затем выберите c по Series.str.get:

df['c'] = df['col1'].str[0].str.get('c')
print (df)
                         col1  col2  col3  c
0  [{'a': 1, 'b': 1, 'c': 1}]     1     2  1
1  [{'a': 2, 'b': 2, 'c': 1}]     2     3  1
2  [{'a': 3, 'b': 1, 'c': 2}]     4     1  2

Если необходимо, все столбцы сформируют первый список, создайте DataFrame конструктором, также добавлено DataFrame.pop для удаления исходного столбца col1 (при необходимости):

df = df.join(pd.DataFrame(df.pop('col1').str[0].tolist(), index=df.index))
print (df)
   col2  col3  a  b  c
0     1     2  1  1  1
1     2     3  2  2  1
2     4     1  3  1  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...