2016-11-30 5 views
2

У меня есть DataFrame df1:Разделить две панды DataFrames с использованием словаря в качестве ключевого

df1 = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD')) 

df1.head() 
    A B C D 
0 9 8 1 1 
1 9 7 1 6 
2 0 6 7 5 
3 5 1 6 0 
4 4 0 5 4 

А второй DataFrame df2:

df2 = pd.DataFrame(np.random.randint(0,10,size=(10, 3)), columns=list('FGH')) 

df2.head() 
    F G H 
0 8 5 9 
1 3 0 7 
2 2 5 4 
3 3 5 4 
4 5 6 6 

и словарь Dict:

dict = {"A" : "F", "B" : "F", "C" : "H", "D" : "G" } 

Я хотел бы разделить два Dataframes, используя элементы словаря в качестве ключа: Colu Побочным млн Колонка F, колонка B на колонке F, колонка C на колонке H и D колонке на колонке G. Результат должен быть:

df3.head 

0 1.125 1.000 0.111 0.200 
1 3.000 2.333 1.429 NA 
...  

Благодаря.

+0

Вы можете показать свои усилия, это не так сложно сделать – EdChum

+0

Что вы подразумеваете под моими усилиями? Я не знаю, как начать. Я думал о слиянии их, но все же я не знаю, как сказать пандам разделить два столбца в одном и том же DataFrame с помощью dict в качестве ключа –

ответ

2

Итерация по элементам вашего словаря, и разделить ключи, которые образуют имена столбцов в df1 со значениями (имена столбцов df2). Они образуют объект серии с его именем, соответствующим ключам. Объедините их вдоль пополам.

И, наконец, reindex их в соответствии с колонками df1, чтобы сохранить заказ.

df = pd.concat([pd.Series(df1[k]/df2[v], name=k) for k,v in my_dict.items()], axis=1) 
df.reindex(columns=df1.columns) 

enter image description here

Примечание: Я изменил имя словаря, так как это не рекомендуется использовать dict назвать их, который также соответствует встроенный вида по путь.

+1

он работает, спасибо! –

2

Все, что вам нужно сделать, это использовать оператор / непосредственно в колонках или в DataFrame Series.

df3 = pd.DataFrame() #initialize an empty dataframe 
for i in dict: 
    df3[i+"/"+dict[i]] = df1[i]/df2[dict[i]] 


df3.head() 

enter image description here

+1

спасибо за ваш ответ –

Смежные вопросы