如何使用Pandas对两列字符串数据重塑并统计交叉计数结果
完整实现代码
import pandas as pd # 构造原始数据集 data = { "fruits": ["orange, apple, banana", "orange, apple, banana", "apple, banana", "orange, apple, banana", "others"], "places": ["New York, London, Boston", "New York, Manchester", "Tokyo", "Hong Kong, Boston", "London"], } df = pd.DataFrame(data) # 拆分逗号分隔值并展开为多行 df_exploded = df.assign( fruits = df['fruits'].str.split(',\s*'), places = df['places'].str.split(',\s*') ).explode('fruits').explode('places') # 生成交叉计数表 res = pd.crosstab(df_exploded['fruits'], df_exploded['places']) print(res)
实现逻辑说明
- 先对
fruits和places两列执行字符串拆分,用正则,\s*匹配逗号加任意数量空格的分隔符,避免拆分后的值出现前导空格 - 两次调用
explode方法,将两列的列表结构分别展开为独立行,让每行仅保留一组「水果-地点」的对应关系 - 直接使用
pd.crosstab对两个维度做交叉统计,输出结果的行索引为水果名称、列索引为地点名称、值为二者的共现次数,和预期输出完全一致
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

