Фрейм данных означает добавление в виде столбца с использованием 2 отдельных фреймов данных - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть 2 кадра данных следующим образом:

Кадр данных 1:

Item    Start Date  End Date    Price   Mean Price
Item-1  21/12/2018  23/12/2018    15        ?
Item-2  22/12/2018  23/12/2018    16.5      ?

Кадр данных 2:

Item    Date    Price
Item-1  21/12/2018  15.1
Item-1  22/12/2018  15.2
Item-1  23/12/2018  15.3
Item-1  24/12/2018  15.4
Item-2  21/12/2018  16.3
Item-2  22/12/2018  17.3
Item-2  23/12/2018  18.3
Item-2  24/12/2018  19.3

На основе кода элемента и выберите подмножествофрейм данных 2 с использованием даты начала и окончания из фрейма данных 1 и вычисления среднего значения цены.Есть ли какой-либо процесс для этого?

Окончательный результат должен выглядеть следующим образом:

Item    Start Date  End Date    Price   Mean Price
Item-1  21/12/2018  23/12/2018  15      15.1997807
Item-2  22/12/2018  23/12/2018  16.5    17.79297614

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

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Ну, все еще учусь у @ Вэнь-Бена, но вот еще один (расширенный) способ сделать это:

# Checking which dates falls in the range followed by taking the mean
res = []
for idx in df1.Item.unique():
    temp = df2[df2.Item==idx]
    idx_ = temp.Date[temp.Date.apply(lambda x: x >= df1[df1.Item == idx]['Start Date'].iloc[0] and x <= df1[df1.Item == idx]['End Date'].iloc[0])].index        
    res.append(df2.loc[idx_, 'Price'].mean())

# Assiging the result mean
df1.loc[:, 'Mean Price'] = res
0 голосов
/ 26 февраля 2019

Вы можете сделать с для цикла

l=[df2.loc[(df2.Item==z) & df2.Date.between(x,y),'Price'].mean() for x,y,z in zip(df1.StartDate,df1.EndDate,df1.Item)]
df1['Price Mean']=l
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...