我有下面的剧本。你知道吗
我被困在最后一条线上了。所以如果列recencypt<;=0.25,它将位于第一个四分位数,当它高于0.75时,它位于第四个四分位数。你知道吗
我试图添加多个条件来计算第二个和第三个四分位数。你知道吗
第二个四分位数为>;0.25和<;=0.5 第三个四分位数为>;0.5和<;=0.75
但是当我尝试在最后一行添加这些多个条件时,我得到了一个错误:
TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]
有人有什么想法吗?你知道吗
import pandas as pd
path = 'Desktop/customer_features.csv'
df = pd.read_csv(path, delimiter=',', header='infer')
#Calculate the percentile for recency, frequency and monetary
df['recencypct'] = df.recency.rank(pct=True)
df['freqencypct'] = df.frequency.rank(pct=True)
df['monencypct'] = df.monetary.rank(pct=True)
#bucket into quartiles
df.loc[df.recencypct <= 0.25, 'recencyqtl'] = 1
df.loc[df.recencypct > 0.75, 'recencyqtl'] = 4
df.loc[df.recencypct > 0.25 & df.recencypct <=0.5, 'recencyqtl'] = 4
使用
pd.qcut
方法可以轻松完成此任务:当然,标签可以被你想要的任何东西所取代,比如你的问题中的整数:
您还可以将其设置为索引,以便能够直接访问四分位数中的值:
或按四分位数和用多个索引对数据进行聚类:
现在您可以访问四分位数,并且仍然将数据的原始索引作为二级索引。你知道吗
函数的求值顺序有问题,因为
&
先于>
和<=
。试试看参见Python operator precedence table。你知道吗
相关问题 更多 >
编程相关推荐