Более быстрый способ перебора словаря и фрейма данных вместе? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть словарь и DataFrame с теми же ключами / столбцами. Однако в DataFrame отсутствуют некоторые данные, которые я буду заполнять с помощью словаря. Это минимальный пример, и мой набор данных намного больше.

mydict = {'one': ['foo', 'bar'], 'two': ['foo', 'bar']}
mydf = pd.DataFrame({'one': ['N/A', 'bar'], 'two': ['foo', 'N/A'], 'foo': ['foo', 'bar'], 'bar': ['foo', 'bar']})

def myfunc(mydict):
    for i,k in mydict.items():
            for m in k:
                mydf[i].replace(to_replace='N/A', value=mydf[m], inplace=True)


for f,g in mydf.iterrows():
        for h in g:
            if h != 'N/A':
                myfunc(mydict)

for i,v in mydict.items(): 
    mydf.drop(columns=v, inplace=True, errors='ignore')

Когда я запускаю свою функцию в большем наборе данных, ядро ​​не останавливается. Что бы быстрее сделать это? Я хочу попробовать использовать df.apply () или векторизовать функцию, но не знаю как. Вывод для приведенного выше примера выглядит следующим образом:

    one two
0   foo foo
1   bar bar

1 Ответ

0 голосов
/ 27 февраля 2020

Попробуйте, и это должно дать вам то, что вы хотите.

# Fill the values using your dictionary
for k, v in mydict.items():
    mydf[k] = v  

# Drop the columns you don't want
mydf.drop(columns=['foo','bar'], inplace=True)  

И вы получите это:

    one two
0   foo foo
1   bar bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...