Pandas DataFrame处理:用DictVectorize统计指定值及提取关联列
解决方案
可以通过拆分字符串+分组聚合的方式实现需求,同时保留var2的关联信息,具体步骤如下:
1. 构建原数据(示例)
import pandas as pd df = pd.DataFrame({ 'target': [1, 0, 1], 'var1': ['jack, jones, phil', 'don, sam, bob', 'jones, alex, sam'], 'var2': ['en-us', 'vn-en', 'en-us'] })
2. 拆分逗号分隔的var1列
把var1中用逗号分隔的名字拆成单独行,同时保留每行对应的target和var2:
# 拆分字符串为列表,再展开成多行 df_exploded = df.assign(var1=df['var1'].str.split(', ')).explode('var1')
拆分后的数据会变成每个名字单独一行,比如jones会出现两次,分别对应原数据中target=1和var2=en-us的行。
3. 分组统计次数并关联var2
按var1(名字)和var2分组,统计每个名字在target=1和target=0时的出现次数:
result = df_exploded.groupby(['var1', 'var2']).agg( target=('target', 'sum'), # 统计target=1的次数 no_target=('target', lambda x: (x == 0).sum()) # 统计target=0的次数 ).reset_index()
最终结果
筛选var1='jones'即可得到你需要的结果:
| var1 | var2 | target | no_target |
|---|---|---|---|
| jones | en-us | 2 | 0 |
这种方式直接把var2纳入分组键,确保每个名字对应的var2信息被保留,解决了你之前用DictVectorize无法关联var2的问题。
内容的提问来源于stack exchange,提问作者Krish
相关产品推荐
相关产品推荐

