我是Python的新手,我正在研究感兴趣的数据集,以帮助我进行学习,尤其是试图更好地理解熊猫和numpy。
我的数据框有超过一百万行,我正在尝试创建一个自定义存储桶,以便可以找到更多有趣的见解。我的数据集如下所示:
我的数据表:
Price Postal_area Purchase_Month
123000 SE22 2018_01
240000 GU22 2017_02
.
.
.
我想将数据分组为<100000、200k-300k,300k-500k,500k +的价格段,然后我想按价格段,月份和邮政地区进行分组。我为创建自定义价格时段而感到困惑。
我试图做的是创建一个自定义函数:
def price_range(Price):
if (Price <= 100000):
return ("Low Value")
elif (100000 < Price < 200000):
return ("Medium Value")
elif (200001 < Price < 500000):
return ("Medium High")
elif (Price > 500001):
return ("High")
else:
return ("Undefined")
然后,我在数据集中创建一个新列,如下所示:
for val in (my_table.Price):
my_table["price_range"] = (price_range(val))
我应该能够从中创建一个agg,但它的过程极其缓慢-已经在一百万个左右的行上运行了30多分钟,并且仍在运行!
我曾尝试使用numpy和pandas(数据透视表,groupby,lambdas)创建自定义存储桶,但无法弄清楚如何合并自定义存储桶逻辑。
我查看了其他一些答案,例如以下答案,但它没有满足我的特殊自定义需求: Efficient way to assign values from another column pandas df
任何帮助,不胜感激!
答案 0 :(得分:0)
使用apply
函数将自定义函数price_range
应用于my_table
my_table['price_range']=my_table['Price'].apply(price_range)
如果要使垃圾箱的距离相等:
my_table['price_range']=pd.cut(my_table['Price'], bins = 4, labels = ['Low Value', 'Medium Value', 'Medium High', 'High'])
答案 1 :(得分:0)
您可以尝试使用pd.cut
来削减范围内的值并指定要分配内容的标签
df
Price
0 12300
1 24000
2 232455
3 343434343
pd.cut(df.Price,[0,100000,200000,500000,np.inf],labels=['Low_value','Medium Value','High','Undefined'])
出局:
0 Medium Value
1 High
2 High
3 Undefined
Name: Price, dtype: category
Categories (4, object): [Low_value < Medium Value < High < Undefined]