表如下所示:
ID |CITY
----------------------------------
1 |London|Paris|Tokyo
2 |Tokyo|Barcelona|Mumbai|London
3 |Vienna|Paris|Seattle
“城市”列包含约1000+个以|分隔的值
我想创建一个flag列来指示一个人是否只访问了感兴趣的城市。
city_of_interest=['Paris','Seattle','Tokyo']
列表中有20个这样的值。
输出应如下所示:
ID |Paris | Seattle | Tokyo
-------------------------------------------
1 |1 |0 |1
2 |0 |0 |1
3 |1 |1 |0
解决方案可以是pandas或pyspark。
3条答案
按热度按时间xdnvmnnf1#
Pandas解决方案
要使用的第一个转换列表
DataFrame.explode
:然后我们可以使用:
方法1:
DataFrame.pivot_table
```new_df=( new_df.explode('CITY')
.pivot_table(columns='CITY',index='ID',aggfunc='size',fill_value=0)
[city_of_interest]
.reset_index()
.rename_axis(columns=None)
)
print(new_df)
输出新数据框:
tmb3ates2#
使用自定义项检查“感兴趣的城市”值是否位于分隔列中。
nwnhqdif3#
对于pyspark,使用split+array\u contains:
对于Pandas,请使用series.str.get\u dummies: