Вставить значения в словарь из столбца DF - Pandas (Python) - PullRequest
0 голосов
/ 26 июня 2018

У меня есть список значений, которые я пытаюсь сопоставить со столбцом панды df, а затем хотел бы создать словарь, который будет иметь значения списка в качестве ключей, а затем значения словаря из другого столбца из данныхРамка.

Вот мой список:

sample_list = [101,105,112]

Мой фрейм данных:

sample_df = pd.DataFrame([[101, "NJ"], [105, "CA"],[111, "MO"], [101, "NJ"], [112, "NB"], [101, "NJ"], [105, "CA"]], \
                         columns=["Col1", "Col2"])

выглядит следующим образом,

    Col1    Col2
0   101     NJ
1   105     CA
2   111     MO
3   101     NJ
4   112     NB
5   101     NJ
6   105     CA

СейчасЯ пытаюсь перебрать список значений (которые являются ключами моего new_dict) и сопоставить их с Col1, и если они совпадают, я хотел бы извлечь значения Col2 в качестве значений моего словаря.Вот так у меня пока есть мой код,

new_dict = {}
for value in sample_list:
    for i in sample_df['Col1']:
        if value == i:
            new_dict[value] = [i for i in sample_df['Col2']]

Однако мой new_dict выглядит следующим образом,

{101: ['NJ', 'CA', 'MO', 'NJ', 'NB', 'NJ', 'CA'],
 105: ['NJ', 'CA', 'MO', 'NJ', 'NB', 'NJ', 'CA'],
 112: ['NJ', 'CA', 'MO', 'NJ', 'NB', 'NJ', 'CA']}

Мне нужен мой вывод, как этот,

{101: ['NJ'],
 105: ['CA'],
 112: ['NB']}

Как мне получить желаемый результат?Любая помощь будет хорошей.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Alt 1

Если вы настаиваете, вот еще одно решение, которое должно быть эффективным при использовании isin() для создания маски, используемой для отфильтровывания нежелательных строк.

m = sample_df['Col1'].isin(sample_list)
sample_df[m].drop_duplicates().groupby('Col1')['Col2'].apply(list).to_dict()

Возвращает: {101: ['NJ'], 105: ['CA'], 112: ['NB']}

примечание: если будет больше неуникальных комбинаций, они тоже будут в списке .Используйте: {k:[v] for k,v in sample_df[m].groupby('Col1')['Col2'].first().items()}, если вам нужен только первый.


Alt 2

Если вы собираетесь использовать элементы списка, но не все, почему не только значения?

m = sample_df['Col1'].isin(sample_list)
sample_df[m].set_index('Col1')['Col2'].to_dict()

Возвраты: {101: 'NJ', 105: 'CA', 112: 'NB'}


Доп. 3

или , если вы хотите, чтобы все элементы:

m = sample_df['Col1'].isin(sample_list)
sample_df[m].groupby('Col1')['Col2'].apply(list).to_dict()

Возвраты: {101: ['NJ', 'NJ', 'NJ'], 105: ['CA', 'CA'], 112: ['NB']}

0 голосов
/ 26 июня 2018

Это сделает это:

new_dict = {i: [sample_df[sample_df['Col1']==i]['Col2'].values[0]] for i in sample_list}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...