2016-10-09 4 views
1

У меня есть первый dataframe df1, как показано ниже. Здесь col_b любое число между h1 и h24 и не содержит все от 1 до 24 для каждой соответствующей даты:Используйте две строки из фрейма данных pandas, чтобы выбрать местоположение в другом фрейме данных

Date  col_b 
20101101 h1 
20101101 h2 
20101101 h3 
20101102 h1 
20101102 h3 
20101103 h2 
20101104 h1 
20101105 h2 
20101105 h3 
20101106 h6 
20101106 h8 
20101106 h24 
20101107 h15 

И второй dataframe df2 как:

date  h1 h2 h3 h4 h5 h6 ... h24 
20101101 4 6 45 6 7 8 ... 5 
20101102 ......................... 
20101103 ......................... 

мне нужно выбрать значения из df2 в список, где строки от df1 соответствуют указанному местоположению в df2.

В настоящее время я использую iterrows для выбора значения строки из df1 и присвоения значений в df2 как df2.loc[df2['Date] ==row[0], row[1]] для каждой строки в df1.

Это беспокойно и требует много времени. Есть ли способ для питонов или панд?

ответ

1

использование DataFrame.lookup():

import numpy as np 
import pandas as pd 

df2 = pd.DataFrame(np.random.randint(0, 10, (5, 3)), 
        columns=list("ABC"), 
        index=pd.date_range("2016/01/01", "2016/05/01", freq="MS")) 

df = pd.DataFrame({"date":df2.index[np.random.randint(0, 5, 10)], 
        "key": df2.columns[np.random.randint(0, 3, 10)]}) 

df["value"] = df2.lookup(df["date"], df["key"]) 
print(df) 

результат:

 date key value 
0 2016-01-01 C  2 
1 2016-05-01 A  8 
2 2016-01-01 A  8 
3 2016-04-01 B  1 
4 2016-04-01 C  2 
5 2016-03-01 A  2 
6 2016-03-01 A  2 
7 2016-04-01 B  1 
8 2016-05-01 A  8 
9 2016-03-01 B  5 
+0

Спасибо за быстрый ответ. У меня есть дата как целочисленный столбец не как индекс. Это дает «KeyError» (с первым значением в столбце 'df') – Jagruth

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

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