2015-12-10 77 views
2

我有一個數據幀像下面..如何大熊貓另一個列子集,一列與條件

 dish_quant_bought dish_name 
       20    A 
       18    B 
       20    A 
       18    B 
       20    A 
       18    B 
       10    C 
       18    B 
       10    C 
       18    B 
       20    D 
       20    D 
       20    D 
       20    D 

我想提取給定菜名相應dish_quant_bought .. 所以對於這道菜,它應該返回只有20,對於B爲18,C爲10 &爲d是20

我用下面的代碼嘗試,但它不工作..

df_['dish_quant_bought']['dish_name'] == 'A' 

普萊斯Ë幫助..

回答

2

不清楚爲什麼你有重複,但你可以使用一個布爾條件來掩蓋DF和利潤回報的山坳:

In [256]: 
df = df.drop_duplicates() 
df 

Out[256]: 
    dish_quant_bought dish_name 
0     20   A 
1     18   B 
6     10   C 
10     20   D 

In [257]:  
df.loc[df['dish_name']=='A', 'dish_quant_bought'] 

Out[257]: 
0 20 
Name: dish_quant_bought, dtype: int64 

你原來的DF的面膜:

In [259]: 
df['dish_name']=='A' 

Out[259]: 
0  True 
1  False 
2  True 
3  False 
4  True 
5  False 
6  False 
7  False 
8  False 
9  False 
10 False 
11 False 
12 False 
13 False 
Name: dish_name, dtype: bool 

您可以通過過濾後調用unique獲得獨特的價值,而不調用drop_duplicates第一:

In [297]: 
df.loc[df['dish_name']=='A', 'dish_quant_bought'].unique() 

Out[297]: 
array([20], dtype=int64) 
+1

或者在'df.loc'之後使用'np.unique'來創建一個班輪。 –

+0

@ColonelBeauvel已更新 – EdChum

1

好吧,如果它們具有相同的量值,您可以通過使用GROUPBY得到,然後將所選列上的意思是,它會產生相同的值

df.groupby(["dish_name"])["dish_quant_bought"].mean() 

然後只需選擇你想要的任何名稱

+0

@服務器這是更好的主意,有意思..非常感謝:) – Neil