Сравнение данных в серии Python Pandas - PullRequest
0 голосов
/ 25 мая 2018

Это 2 ряда данных, которые я хочу сравнить на основе третьего.

data_SKU1:

SKU     Weight1     
1234    20
1235    30
111     40
101     23

data_SKU2:

SKU     Weight2
1234    22
1235    35
111     47
101     87

flag_Data:

SKU
1234     True
1235     False
111      True
101      False
Name: Date, dtype: bool

Основываясь на значениях в серии flag_Data, мне нужно разделить значение Weight1 на Weight2 или наоборот.

Для примера:

j = flag_Data(dados_SKU1, dados_SKU1) #this generates the third series
if(j[1234]==True):
  generated_serie = data_SKU1['Weight1'][1234] / dados_SKU2['Weight2'][1234]
else:
  generated_serie = data_SKU2['Weight2'][1234] / data_SKU1['Weight1'][1234]

Но это должно быть сделано для всех SKU серии, а не только для SKU 1234. Не могли бы вы, ребята, помочь разобраться, как?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Настройка
merge

df = df1.merge(df2)

    SKU  Weight1  Weight2   FLAG
0  1234       20       22   True
1  1235       30       35  False
2   111       40       47   True
3   101       23       87  False

Опция 1
np.where

df['division'] = np.where(df['FLAG'], df['Weight1']/df['Weight2'], df['Weight2']/df['Weight1'])

Опция 2
loc с fillna

df.loc[df['FLAG'], 'division'] = df.Weight1 / df.Weight2
df['division'] = df.division.fillna(df.Weight2/df.Weight1)

Опция 3
mask с fillna

df['division'] = (df.Weight1 / df.Weight2.mask(~df.FLAG)).fillna(df.Weight2/df.Weight1)

Все результаты в:

    SKU  Weight1  Weight2   FLAG  division
0  1234       20       22   True  0.909091
1  1235       30       35  False  1.166667
2   111       40       47   True  0.851064
3   101       23       87  False  3.782609
0 голосов
/ 25 мая 2018

Вы можете использовать np.where для этого:

result = np.where(flag_Data,
                  data_SKU1['Weight1']/data_SKU2['Weight2'],
                  data_SKU2['Weight2']/data_SKU1['Weight1'])
...