Пайтон loop наполнять dataframe с данными

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

df1

"date"     "value"     "Exchange_Rate"
2019-Jan    35691
2019-Jan    17076
2019-Dec    988
2019-Dec    1996


df2

"exchange_rate" "date"     "real_or_forecast"

19.126386   2019-Jan  real
19.197585   2019-Feb  real
19.269133   2019-Mar  real
19.089059   2019-Apr  real
19.042815   2019-May  real
19.142962   2019-Jun  real
NaN         2019-Jul  forecast
NaN         2019-Aug  forecast
19.237154   2019-Sep  forecast
NaN         2019-Oct  forecast
19.559262   2019-Nov  forecast
NaN         2019-Dec  forecast
19.559262       2020-Jan  forecast

def get_fill_currency(df):   
    for value in df['date']
        if df1['date'] == date :
            return value['exchange_rate']

df1

"date"     "value"     "Exchange_Rate"
2019-Jan    35691        19.126386       
2019-Jan    17076        19.126386
2019-Dec    988          19.559262
2019-Dec    1996         19.559262
0
задан 06.07.2019, 16:15
1 ответ

Для interporlar недействительная стоимость у тебя есть в твой disposici¦n pandas.Series.interpolate, по умолчанию осуществляется линейный interpolaci¦n:

>>> df2['exchange_rate'].interpolate(method="linear")

0     19.126386
1     19.197585
2     19.269133
3     19.089059
4     19.042815
5     19.142962
6     19.174359
7     19.205757
8     19.237154
9     19.398208
10    19.559262
11    25.057631
12    30.555999

, но ты имеешь múltiples métodos осуществленные. Например используя предварительную не недействительную стоимость (padding):

>>> df2['exchange_rate'].interpolate(method="pad")

0     19.126386
1     19.197585
2     19.269133
3     19.089059
4     19.042815
5     19.142962
6     19.142962
7     19.142962
8     19.237154
9     19.237154
10    19.559262
11    19.559262
12    30.555999

Данные - данные твоего примера, кроме для última линия (2020-Jan), для которой я изменил стоимость от 19.559262 до 30.555999 для того, чтобы было видно различие между métodos.

Относительно перемещения стоимости в df1 с df2, действительно есть большие формы, включенные использовать один for, как ты выдвигаешь, или funci¦n с pandas.DataFrame.apply. Тем не менее я верю в то, что форма mÃ: s ¦ptima для этих случаев состоит в том, чтобы использовать pandas.Series.map, которая позволяет брать стоимость в mapear с другой серии, используя ¦-ndices как ключ.

import io
import pandas as pd

df1_data = io.StringIO("""\
    date    value
2019-Jan    35691
2019-Jan    17076
2019-Dec    988
2019-Dec    1996
""")

df2_data = io.StringIO("""\
exchange_rate       date  real_or_forecast
    19.126386   2019-Jan              real
    19.197585   2019-Feb              real
    19.269133   2019-Mar              real
    19.089059   2019-Apr              real
    19.042815   2019-May              real
    19.142962   2019-Jun              real
    NaN         2019-Jul          forecast
    NaN         2019-Aug          forecast
    19.237154   2019-Sep          forecast
    NaN         2019-Oct          forecast
    19.559262   2019-Nov          forecast
    NaN         2019-Dec          forecast
    19.559262   2020-Jan          forecast
""")

df1 = pd.read_csv(df1_data, sep="\s+")
df2 = pd.read_csv(df2_data, sep="\s+")

df1["exchange_rate"] = df1["date"].map(df2.set_index('date')['exchange_rate']
                                          .interpolate(method="linear")
                                      )
>>> df1

       date  value  exchange_rate
0  2019-Jan  35691      19.126386
1  2019-Jan  17076      19.126386
2  2019-Dec    988      19.559262
3  2019-Dec   1996      19.559262

, Если ты хочешь, чтобы interpolaci¦n применялся к самому df2, не-нравься, apl¦-имей осадку раньше:

df2["exchange_rate"].interpolate(method="linear", inplace=True)
df1["exchange_rate"] = df1["date"].map(df2.set_index('date')['exchange_rate'])

Edici¦n

Para применять pandas.Series.map - необходимо, чтобы серия той, которую берут данные, считала ¦-ndice колонну, которая используется, чтобы присоединять стоимость обоих DataFrames, date в нашем примере. Это asÃ, - потому что каждая стоимость date df1 идет искать в ¦-ndice серии, перешедшей в map и стоимость, ассоциируемая с этим ¦-ndice (нахожения) - использованный, чтобы заселять колонну exchange_rate из df1.

, Если в нашем случае колонна date уже снаружи ¦-ndice df2, bastar¦ - в с:

df1["exchange_rate"] = df1["date"].map(df2['exchange_rate'].interpolate(method="linear"))

, если это ¦-ndice в обоих DataFrames, тогда мы можем делать:

df1["exchange_rate"] = df1.index.map(df2['exchange_rate'].interpolate(method="linear"))
1
ответ дан 11.11.2019, 03:55
  • 1
    set index он служит для того, чтобы поместить колонну x как индекс не?, если эта колонна восходила уже, это индекс, который я делаю? чтобы работать с mapo он обязательный, что у серии, которая используется, был индекс? – Juan Teran 08.07.2019, 07:46
  • 2
    Если, он обязательный, потому что он используется как ключ для mapeo. А именно, стоимость восходила df1 он ищется в í ndice серии и стоимости, ассоциируемой с этим í ndice он используется, чтобы замещать. Если твоя колонна восходила уже, он í ndice ты не нуждаешься set_index. ¿ восходите он tambié n индекс в df1 или только df2? – FJSevilla 08.07.2019, 07:49
  • 3
    уже я вижу, usé информация как df2 [" exchange_rate"] = df1 [" date"] .map (df3 [' exchange_rate']), так как индекс был seteado, не valí в горе setearlo снова – Juan Teran 08.07.2019, 07:50
  • 4
    услышь и случайности sabrá s делать функции, чтобы умножать колонны? – Juan Teran 08.07.2019, 07:56
  • 5
    Вопрос здесь состоит в том, что равный я пробую научиться использовать loops fors и все, чтобы реализовывать повторения – Juan Teran 08.07.2019, 07:57