根据另一列

时间:2017-04-30 17:00:02

标签: python pandas

我有一个pandas数据框,其中一列只包含字符串。

df= pd.DataFrame(
  {
    "A": [2,4,7,17,39], 
    "B": ["apple","apple","broccoli","rose","apple"]
  }
)

我想查看这个专栏" B"并查找字符串包含单词的某个部分的所有时间。然后我创建了一个新专栏" C"它包含一系列字符串,表示" fruit"每当" app"在排,"花"无论什么时候" ros"无论什么时候出现和蔬菜" brocc"出现了。

最终的数据框如下所示:

df= pd.DataFrame(
  {
    "A": [2,4,7,17,39], 
    "B": ["apple","apple","broccoli","rose","apple"], 
    "C": ["fruit","fruit", "vegetable", "flower", "fruit"]
  }
)

2 个答案:

答案 0 :(得分:3)

创建字典

d = {'apple': 'fruit', 'broccoli': 'vegetable', 'rose': 'flower'}

并在mapreplace中使用它(地图更快):

df['B'].map(d)
Out: 
0        fruit
1        fruit
2    vegetable
3       flower
4        fruit
Name: B, dtype: object

df['B'].replace(d)
Out: 
0        fruit
1        fruit
2    vegetable
3       flower
4        fruit
Name: B, dtype: object

答案 1 :(得分:2)

您可以使用字典作为转换器,将get方法作为apply的输入:

converter = {'apple': 'fruit',
             'broccoli': 'veg',
             'rose': 'flower'}

df['C'] = df['B'].apply(converter.get)
print(df)
    A         B       C
0   2     apple   fruit
1   4     apple   fruit
2   7  broccoli     veg
3  17      rose  flower
4  39     apple   fruit

如果部分匹配,您需要稍微更改一下:

converter = {'app': 'fruit',
             'brocc': 'vegetable',
             'ros': 'flower'}

df['C'] = df['B'].apply(lambda original: next(val for key, val in converter.items() if key in original))
print(df)
    A         B          C
0   2     apple      fruit
1   4     apple      fruit
2   7  broccoli  vegetable
3  17      rose     flower
4  39     apple      fruit

next(val for key, val in converter.items() if key in original)将为字典中的第一个找到的键提供“"行"”中的值。