簡體   English   中英

根據值數組的條件在熊貓中分配值

[英]Assign values in pandas based on condition on array of values

我有一堆數據框和相同數量的數組,這些數組代表這些數據框的price列中的間隔(破折號)

我需要根據這些時間間隔分配一個名為description_contrib的新列,例如,如果價格為16 USD,並且時間間隔數組看起來像[0,10] ,這意味着該行的description_contrib列將為2,因為16大於0且也大於0大於10

我想出了這段代碼:

def description_contribution(df_cat):
    for i in range(0, len(df_cat)):
        for j in range(0, len(intervals[i])):
            df_cat[i]['description_contrib'].loc[df_cat[i]['price'] >= intervals[i][j]] = j

但是它運行緩慢,為此可能有更強大的解決方案

我該如何改善呢?

UPD數據如下所示

train_id    item_condition_id   brand_name  price   shipping    description_contrib
5644        1                   Unknown     15.0    1           6
12506       1                   Unknown     8.0     1           3
26141       1                   Unknown     20.0    1           8

此數據幀的間隔為:

[0.0, 0.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 20.0, 22.0, 31.0]

在大多數情況下,加快處理速度的第一個選擇是用向量化操作替換循環。 例如,您可以通過以下方式使代碼更快,更易讀:

import pandas as pd

intervals = [0, 10]
df_cat = pd.DataFrame({'price': range(100)})
df_cat['description_contrib'] = sum(df_cat['price'] > v for v in intervals)

假設df_cat有許多行並且間隔很少,這將為您帶來良好的性能。 不過,可能存在更快的方法。

您可以對numpy數組進行廣播比較-

v = (df.price.values[:, None] > intervals).sum(1)

可以將其分配回df

df['description_contrib'] = v

需要注意的是內存使用情況,特別是對於較大的數據。 公平地權衡速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM