Python Pandas Series中的数据比较

2024-04-24 03:49:25 发布

您现在位置:Python中文网/ 问答频道 /正文

这是两个数据系列,我想比较的基础上第三个。你知道吗

数据单元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\ u数据序列中的值,我需要将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。你们能帮我弄清楚怎么做吗?你知道吗


Tags: 数据falsetruedata基础generated单元flag
2条回答

设置
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
locfillna

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

选项3 maskfillna

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

你可以用np.哪里为此:

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

相关问题 更多 >