如何根据不同列中的字​​符串创建新列

yan*_*ang 1 python string conditional-statements pandas

我有一个数据框,如下所示:

类型 城市
1 dki雅加达
2 爪哇巴拉特
3 爪哇登加
4 东爪哇
5 苏拉威西岛

我想创建一个名为city_group基于城市的新专​​栏。

  • dki 雅加达,Jawa Barat: jabo,jabar
  • 贾瓦登加、贾瓦登加: jateng、jatim
  • 苏拉威西岛:其他

期望的数据框将是这样的:

类型 城市 城市组
1 dki雅加达 贾博、贾巴尔
2 爪哇巴拉特 贾博、贾巴尔
3 爪哇登加 贾登, 贾蒂姆
4 东爪哇 贾登, 贾蒂姆
5 苏拉威西岛 其他的

到目前为止,我所做的是使用下面的脚本,但我不知道如何在条件中放入多个字符串。

df.loc[df['city'].str.contains("dki jakarta),'city_group'] = 'jabo, jabar'
Run Code Online (Sandbox Code Playgroud)

如何使用 pandas 获取所需的数据框?先感谢您

jez*_*ael 5

创建列表字典以按键映射并在字典理解中将其展平,因此可以使用Series.map-Series.fillna字典中不匹配的所有值others在列中创建值city_group

d = {'jabo, jabar':['dki jakarta','jawa barat'],
     'jateng, jatim':['jawa tengah','jawa timur']}

d1 = {x: k for k, v in d.items() for x in v}
df['city_group'] = df['city'].map(d1).fillna('others')
print (df)
   type         city     city_group
0     1  dki jakarta    jabo, jabar
1     2   jawa barat    jabo, jabar
2     3  jawa tengah  jateng, jatim
3     4   jawa timur  jateng, jatim
4     5     sulawesi         others
Run Code Online (Sandbox Code Playgroud)