Создайте значения Dataframe, используя словарь и простую математику - PullRequest
1 голос
/ 09 марта 2020

Мой оригинальный фрейм данных выглядит следующим образом. Это первые 5 строк:

                     Date      Id        Earned        Redeemed    Type
0 2019-01-01 00:01:18.599      69          1000               0  REGULAR
1 2019-01-01 00:04:25.287      69          1000               0  REGULAR
2 2019-01-01 00:18:21.688      70          1000               0  REGULAR
3 2019-01-01 00:29:14.709      71          1000               0      VIP
4 2019-01-01 00:30:26.460      69             0            1000  REGULAR

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

dict = {
        '69': {'REGULAR': 5, 'VIP': 10},
        '70': {'REGULAR': 10},
        '71': {'REGULAR': 1, 'VIP': 2}
       }

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

                     Date      Id        Earned        Redeemed    Type   Earned_Normal
0 2019-01-01 00:01:18.599      69          1000               0  REGULAR            200
1 2019-01-01 00:04:25.287      69          1000               0  REGULAR            200
2 2019-01-01 00:18:21.688      70          1000               0  REGULAR            100
3 2019-01-01 00:29:14.709      71          1000               0      VIP            500
4 2019-01-01 00:30:26.460      69             0            1000  REGULAR              0

Значения в столбце «Id» и «Тип» используются в качестве ключей в словаре, который возвращает коэффициент, например, id: 69 и тип: REGULAR возвращает 5.

Поэтому при index 0, Earned_Normal = Earned / 5 = 200.

Я выяснил, как это сделать на определенном c уровне строки, как мне сделать это динамически для всех строк?

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я не знаю, что означает, что значения в словаре, поэтому я подпишу это как х.

df['x'] = df['Id'].apply(lambda x: dict[str(x)])
df['Earned_normal'] = df.apply(lambda x: x[2]/x[5][x[4]], axis=1) #here may be problem with index cause I kinda wrong imported csv.
0 голосов
/ 09 марта 2020

Вы можете попробовать что-то вроде этого. Я рекомендую вам заменить ключи для замены на int.

import pandas as pd
import numpy as np

replacement_dict = {
        '69': {'REGULAR': 5, 'VIP': 10},
        '70': {'REGULAR': 10},
        '71': {'REGULAR': 1, 'VIP': 2}
       }

data = [
    {"Id":69,"Earned":1000,"Redeemed":0,"Type":"REGULAR"},
    {"Id":70,"Earned":1000,"Redeemed":0,"Type":"REGULAR"},
    {"Id":71,"Earned":1000,"Redeemed":0,"Type":"VIP"}
    ]

df = pd.DataFrame.from_dict(data)
df["Earned_Normal"] = np.nan

print(df)

def transform_row(r):
    # we add a default
    default = {'REGULAR': 5, 'VIP': 10}
    replacement_for_this_row = replacement_dict.get(str(r.Id),default)
    r.Earned_Normal = r.Earned / replacement_for_this_row[r.Type]
    return r


print(df.apply(transform_row, axis=1))

Надеюсь, это поможет

...