pandas 如何基于来自不同列字符串创建新列

wn9m85ua  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个 Dataframe ,看起来像这样:
| 类型|城市|
| - ------| - ------|
| 1个|雅加达dki|
| 第二章|巴拉特贾瓦|
| 三个|贾瓦登加|
| 四个|贾瓦帖木儿|
| 五个|苏拉威西|
我想基于城市创建一个名为city_group的新列。

  • dki雅加达、巴拉特:贾博,贾巴尔
  • 贾瓦登加,贾瓦登加:贾滕、贾蒂姆
  • 苏拉威西岛:其他

所需的 Dataframe 如下所示:
| 类型|城市|城市群|
| - ------| - ------| - ------|
| 1个|雅加达dki|贾博,贾巴尔|
| 第二章|巴拉特贾瓦|贾博,贾巴尔|
| 三个|贾瓦登加|贾滕、贾蒂姆|
| 四个|贾瓦帖木儿|贾滕、贾蒂姆|
| 五个|苏拉威西|其他|
到目前为止,我所做的是与下面的脚本,但我不知道如何把多个字符串的条件。

df.loc[df['city'].str.contains("dki jakarta),'city_group'] = 'jabo, jabar'

我怎样才能得到想要的Pandas Dataframe ?谢谢你提前

zujrkrfu

zujrkrfu1#

创建列表字典,以便通过键进行Map,并在字典理解中将其扁平化,以便可以将Series.mapSeries.fillna一起使用-字典中所有不匹配的值在列city_group中创建others值:

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

相关问题