Python 通过数据帧像switch语句一样进行广播的聪明方法
在其他语言中,我会使用开关进行分段操作。有没有一种方法可以通过切片或广播来高效地执行以下操作?数据结构是一个多索引数据帧Python 通过数据帧像switch语句一样进行广播的聪明方法,python,pandas,dataframe,array-broadcasting,Python,Pandas,Dataframe,Array Broadcasting,在其他语言中,我会使用开关进行分段操作。有没有一种方法可以通过切片或广播来高效地执行以下操作?数据结构是一个多索引数据帧 def spreadStat(data): data.loc[data.Pval - data.Tval > 0 and data.Tval.value() > 75, 'Tval'] = data['Tval'] - 500 data.loc[data.Pval - data.Tval > 0 and data.Tval.value() < 25,
def spreadStat(data):
data.loc[data.Pval - data.Tval > 0 and data.Tval.value() > 75, 'Tval'] = data['Tval'] - 500
data.loc[data.Pval - data.Tval > 0 and data.Tval.value() < 25, 'Tval'] = data['Tval'] - 400
data.loc[data.Pval - data.Tval > 0 and 25 < data.Tval.value() < 40, 'Tval'] = data['Tval'] - 300
data.loc[data.Pval - data.Tval > 0 and 60 < data.Tval.value() < 75, 'Tval'] = data['Tval'] - 200
data.loc[data.Pval - data.Tval > 0 and 40 < data.Tval.value() < 60, 'Tval'] = data['Tval'] - 100
def spreadStat(数据):
data.loc[data.Pval-data.Tval>0和data.Tval.value()>75,'Tval']=data['Tval']-500
data.loc[data.Pval-data.Tval>0和data.Tval.value()<25,'Tval']=data['Tval']-400
data.loc[data.Pval-data.Tval>0和250和600和40
看起来这可能是一个线性函数或函数的某种映射?如果您有任何帮助,我们将不胜感激。这里有
cut
:
bins = [-np.inf, 25, 40, 60, 75, np.inf]
vals = [400, 300, 200, 100, 500]
# I didn't test, but `astype` might not be necessary
to_subtract = pd.cut(data.Tval, bins=bins, labels=vals).astype(float)
data.loc[data.Pval > data.Tval, 'Tval'] -= to_subtract