2016-08-23 15 views
7

Tôi cố gắng thêm một cột mới "energy_class" vào một khung dữ liệu "df_energy" có chứa chuỗi "cao" nếu giá trị "consumer_energy"> 400, "trung bình" nếu "consumer_energy" "giá trị nằm trong khoảng từ 200 đến 400 và" thấp "nếu giá trị" consumer_energy "nhỏ hơn 200. Tôi cố gắng sử dụng np.where không bị sần, nhưng tôi thấy rằng numpy.where(condition[, x, y]) chỉ xử lý hai điều kiện không giống 3 trong trường hợp của tôi.Numpy "ở đâu" với nhiều điều kiện

Bất kỳ ý tưởng nào để giúp tôi?

Cảm ơn bạn trước

Trả lời

9

Bạn có thể sử dụng một ternary:

np.where(consumption_energy > 400, 'high', 
     (np.where(consumption_energy < 200, 'low', 'medium))) 
8

tôi sẽ sử dụng phương pháp cut() đây, mà sẽ tạo ra rất hiệu quả và bộ nhớ tiết kiệm category dtype:

In [124]: df 
Out[124]: 
    consumption_energy 
0     459 
1     416 
2     186 
3     250 
4     411 
5     210 
6     343 
7     328 
8     208 
9     223 

In [125]: pd.cut(df.consumption_energy, [0, 200, 400, np.inf], labels=['low','medium','high']) 
Out[125]: 
0  high 
1  high 
2  low 
3 medium 
4  high 
5 medium 
6 medium 
7 medium 
8 medium 
9 medium 
Name: consumption_energy, dtype: category 
Categories (3, object): [low < medium < high] 
4

Hãy thử cách này: Sử dụng thiết lập từ @Maxu

conditions = [ df2['consumption_energy'] >= 400, (df2['consumption_energy'] < 400) & (df2['consumption_energy']> 200), df2['consumption_energy'] <= 200 ] 
choices  = [ "high", 'medium', 'low' ] 

df2["energy_class"] = np.select(conditions, choices, default=np.nan) 


    consumption_energy energy_class 
0     459   high 
1     416   high 
2     186   low 
3     250  medium 
4     411   high 
5     210  medium 
6     343  medium 
7     328  medium 
8     208  medium 
9     223  medium 
2

Tôi muốn giữ mã sạch. Đó là lý do tại sao tôi thích np.vectorize cho các tác vụ như vậy.

def conditions(x): 
    if x > 400: 
     return "High" 
    elif x > 200: 
     return "Medium" 
    else: 
     return "Low" 

func = np.vectorize(conditions) 
energy_class = func(df_energy["consumption_energy"]) 

Sau đó, chỉ cần thêm mảng NumPy như một cột trong dataframe bạn sử dụng:

df_energy["energy_class"] = energy_class 

Ưu điểm trong phương pháp này là nếu bạn muốn thêm khó khăn phức tạp hơn để một cột, nó có thể được thực hiện dễ dàng. Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan