У меня есть данные о продажах.Я хочу добавить еще два столбца, которые выделяют важные значения в других столбцах.
На данный момент у меня есть код, который возвращает значения в новые столбцы всякий раз, когда совершается продажа.Поэтому, если тема появляется в столбце Sales
, соответствующие значения индексируются в новых столбцах.
import pandas as pd
import numpy as np
a = 5
N = 10
df = pd.DataFrame({
'Tom_$' : [500, 50, 10, 60, 50, 77, 30, 600, 40, 60],
'Tom_c' : [100, 20, 40, 50, 0, 67, 90, 100, 0, 0],
'Code' : ['nan', 'nan', 'Big', 'nan', 'nan', 'Small', 'nan','nan', 'nan','nan'],
'Sales' : ['nan','nan','Tom','nan','nan','Tom','nan','nan','nan','nan']})
df['Big'] = df.apply(lambda row: row.get(row['Sales']+'_$') if pd.notnull(row['Sales']) else np.nan, axis=1)
df['Small'] = df.apply(lambda row: row.get(row['Sales']+'_c') if pd.notnull(row['Sales']) else np.nan, axis=1)
Вывод:
Code Julie_$ Julie_c Sales Tom_$ Tom_c Dollars Cents
0 nan 500 300 nan 500 100 NaN NaN
1 nan 40 20 nan 50 20 NaN NaN
2 Big 10 70 Tom 10 40 10.0 40.0
3 nan 10 50 nan 60 50 NaN NaN
4 nan 50 80 nan 50 0 NaN NaN
5 Small 37 67 Tom 77 67 77.0 67.0
6 nan 30 50 nan 30 90 NaN NaN
7 Big 900 100 Julie 600 100 900.0 100.0
8 nan 40 40 nan 40 0 NaN NaN
9 nan 50 0 nan 60 0 NaN NaN
Это отлично работает, но я хочу добавить еще один слой, используя столбец Code
.Если значение в этом столбце равно Big
, я хочу продолжать возвращать значения продавца до новой продажи.Если это Small
Мне все равно.
Таким образом, результат будет:
Code Julie_$ Julie_c Sales Tom_$ Tom_c Dollars Cents
0 nan 500 300 nan 500 100 NaN NaN
1 nan 40 20 nan 50 20 NaN NaN
2 Big 10 70 Tom 10 40 10.0 40.0
3 nan 10 50 nan 60 50 60.0 50.0
4 nan 50 80 nan 50 0 50.0 0.0
5 Small 37 67 Tom 77 67 77.0 67.0
6 nan 30 50 nan 30 90 NaN NaN
7 Big 900 100 Julie 600 100 900.0 100.0
8 nan 40 40 nan 40 0 40.0 0.0
9 nan 50 0 nan 60 0 60.0 0.0
Я рассмотрел использование аналогичного метода для возврата значений, таких как Sales
столбец
df['Dollars'] = df.apply(lambda row: row.get(row['Sales']+'_$') if pd.notnull(row['Sales']) else np.nan, axis=1)
df['Cents'] = df.apply(lambda row: row.get(row['Sales']+'_c') if pd.notnull(row['Sales']) else np.nan, axis=1)
Но это толькоработает, когда значение совпадает с индексом.Я немного запутался.Я не уверен, должен ли я заполнить данные, чтобы в столбце Code
всегда были значения.
Code
0 nan
1 nan
2 Big
3 Big
4 Big
5 Small
6 Small
7 Big
8 Big
9 Big
Затем я могу выбрать важные из них.Но я не хочу менять исходный набор данных.