Python 基于另一列在dataframe中创建列
我有一个数据框,其中一列只包含字符串Python 基于另一列在dataframe中创建列,python,pandas,Python,Pandas,我有一个数据框,其中一列只包含字符串 df= pd.DataFrame( { "A": [2,4,7,17,39], "B": ["apple","apple","broccoli","rose","apple"] } ) 我想检查这个列“B”,查找字符串包含单词某个部分的所有时间。然后我创建了一个新的列“C”,其中包含一系列字符串,每当“app”在行中时都会显示“fruit”,每当“ros”出现时都会显示“flower”,每当“brocc”出现时都会显示“veget
df= pd.DataFrame(
{
"A": [2,4,7,17,39],
"B": ["apple","apple","broccoli","rose","apple"]
}
)
我想检查这个列“B”,查找字符串包含单词某个部分的所有时间。然后我创建了一个新的列“C”,其中包含一系列字符串,每当“app”在行中时都会显示“fruit”,每当“ros”出现时都会显示“flower”,每当“brocc”出现时都会显示“vegeture”
最终的数据帧将如下所示:
df= pd.DataFrame(
{
"A": [2,4,7,17,39],
"B": ["apple","apple","broccoli","rose","apple"],
"C": ["fruit","fruit", "vegetable", "flower", "fruit"]
}
)
您可以使用字典作为转换器,它的
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
接下来的命令(val代表key,val在converter.items()中,如果key在original中)
将从字典中为“row”中找到的第一个key提供值。创建一个字典
d = {'apple': 'fruit', 'broccoli': 'vegetable', 'rose': 'flower'}
并在映射
或替换
中使用它(映射速度更快):
我稍微编辑了这个问题,这样就不需要实体的全名了。这会改变你提供的答案吗?@John你通常不应该以非琐碎的方式改变问题(特别是如果你可以使答案无效的话)。改为问一个新问题。@John不,这不适用于部分匹配。这个问题的规则不是很清楚。单词的各个部分是事先确定的吗?例如,你能像这样构建一个字典吗?或者,是否要使用此字典,但如果存在部分匹配,则返回一个值?对于后者,您需要澄清什么样的匹配是可以接受的。如果只有
o
,会发生什么情况?这是一种蔬菜还是一朵花?我也同意,一个新的问题会更好。
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