Python系列中的数据比较

Python系列中的数据比较,python,pandas,dataframe,timestamp,series,Python,Pandas,Dataframe,Timestamp,Series,这是两个数据系列,我希望在第三个数据系列的基础上进行比较 数据单元1: SKU Weight1 1234 20 1235 30 111 40 101 23 数据单元2: SKU Weight2 1234 22 1235 35 111 47 101 87 标志数据: SKU 1234 True 1235 False 111 True 101 False Name: Date,

这是两个数据系列,我希望在第三个数据系列的基础上进行比较

数据单元1:

SKU     Weight1     
1234    20
1235    30
111     40
101     23
数据单元2:

SKU     Weight2
1234    22
1235    35
111     47
101     87
标志数据:

SKU
1234     True
1235     False
111      True
101      False
Name: Date, dtype: bool
基本上基于flag_数据系列中的值,我需要将Weight1的值除以Weight2,反之亦然

对于intance:

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。你们能帮我弄清楚怎么做吗?

你们可以用np.where来做这个:

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

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
df['division'] = np.where(df['FLAG'], df['Weight1']/df['Weight2'], df['Weight2']/df['Weight1'])
df.loc[df['FLAG'], 'division'] = df.Weight1 / df.Weight2
df['division'] = df.division.fillna(df.Weight2/df.Weight1)
df['division'] = (df.Weight1 / df.Weight2.mask(~df.FLAG)).fillna(df.Weight2/df.Weight1)
选项1
np.其中

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
df['division'] = np.where(df['FLAG'], df['Weight1']/df['Weight2'], df['Weight2']/df['Weight1'])
df.loc[df['FLAG'], 'division'] = df.Weight1 / df.Weight2
df['division'] = df.division.fillna(df.Weight2/df.Weight1)
df['division'] = (df.Weight1 / df.Weight2.mask(~df.FLAG)).fillna(df.Weight2/df.Weight1)
选项2
loc
fillna

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
df['division'] = np.where(df['FLAG'], df['Weight1']/df['Weight2'], df['Weight2']/df['Weight1'])
df.loc[df['FLAG'], 'division'] = df.Weight1 / df.Weight2
df['division'] = df.division.fillna(df.Weight2/df.Weight1)
df['division'] = (df.Weight1 / df.Weight2.mask(~df.FLAG)).fillna(df.Weight2/df.Weight1)
选项3
掩码
使用
填充

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
df['division'] = np.where(df['FLAG'], df['Weight1']/df['Weight2'], df['Weight2']/df['Weight1'])
df.loc[df['FLAG'], 'division'] = df.Weight1 / df.Weight2
df['division'] = df.division.fillna(df.Weight2/df.Weight1)
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