Python中基于大型Excel数据生成分组特征矩阵及筛选重复编号
没问题,我来帮你搞定这个需求!我们可以用Python的pandas库轻松实现——不管你的数据是xlsx、csv还是xls格式都能处理,逻辑清晰且代码容易复用。
具体实现步骤与代码
1. 导入工具并读取数据
首先导入pandas,然后用对应函数读取你的文件:Excel格式(xlsx/xls)用pd.read_excel(),CSV格式用pd.read_csv():
import pandas as pd # 替换成你的实际文件路径 df1 = pd.read_excel("dataframe1.xlsx") # 或 pd.read_csv("dataframe1.csv") df2 = pd.read_excel("dataframe2.xlsx")
2. 筛选同一Name下出现两次的No.
我们需要先锁定同一个Name下,No.出现至少两次的(Name, No.)组合,用分组统计就能快速实现:
# 统计每个(Name, No.)组合的出现次数 pair_counts = df1.groupby(['Name', 'No.']).size().reset_index(name='appear_times') # 筛选出出现次数≥2的目标组合 target_pairs = pair_counts[pair_counts['appear_times'] >= 2][['Name', 'No.']]
注:这里用df1统计次数是因为你的示例数据中两个DataFrame的重复组合一致;如果实际数据有差异,可以合并df1和df2后再统计。
3. 构建特征矩阵
把两个DataFrame中符合条件的记录筛选出来,再合并成包含Comment和Report的特征矩阵:
# 从df1筛选目标记录,保留Comment列 filtered_df1 = df1.merge(target_pairs, on=['Name', 'No.'], how='inner') filtered_df1 = filtered_df1[['Name', 'No.', 'Comment']] # 从df2筛选目标记录,保留Report列 filtered_df2 = df2.merge(target_pairs, on=['Name', 'No.'], how='inner') filtered_df2 = filtered_df2[['Name', 'No.', 'Report']] # 合并得到最终特征矩阵 feature_matrix = pd.merge(filtered_df1, filtered_df2, on=['Name', 'No.'], how='outer')
4. 查看最终结果
用你提供的示例数据运行后,输出的特征矩阵会是:
| Name | No. | Comment | Report |
|---|---|---|---|
| Bob | 2123320 | Doesn't Matter | Great |
| Bob | 2123320 | Something | Good |
完全符合需求——只保留了Name为Bob、No.为2123320的重复记录,同时整合了Comment和Report两个特征列。
额外小贴士
- 如果数据里存在同一(Name, No.)对应多条Comment/Report的情况,代码会自动匹配所有对应记录,不会丢失信息;
- 针对大型数据,pandas的处理效率也能满足需求,无需担心性能问题。
内容的提问来源于stack exchange,提问作者A.Code.1
相关产品推荐
相关产品推荐

