如何在pandas中将一个列与另一列上的条件进行子集化

时间:2015-12-10 15:35:48

标签: python pandas

我有一个类似下面的数据框..

     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 .. 所以对于菜A,它应该只返回20,因为B是18,C是10&因为D是20

我正在尝试下面的代码,但它不起作用..

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

请帮助..

2 个答案:

答案 0 :(得分:2)

不清楚为什么你有重复但你可以使用布尔条件来掩盖df并返回感兴趣的col:

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 :(得分:1)

好吧,如果它们具有相同的数量值,您可以通过使用groupby然后在所选列上表示它将产生相同的值

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

然后只需选择您想要的任何名称