请求将文件-关键词映射DataFrame转换为关键词-文件映射结构
实现DataFrame关键词与对应文件名列表的转换
原始输入DataFrame
business049.txt [bmw, cash, fuel, mini, product, less, mini] business470.txt [saudi, investor, pick, savoy, london, famou] business075.txt [eu, minist, mull, jet, fuel, tax, european] business101.txt [australia, rate, australia, rais, benchmark] business060.txt [insur, boss, plead, guilti, anoth, us, insur]
需求说明
将上述结构转换为两列的DataFrame:一列是关键词,另一列是包含该关键词的文件名列表,示例格式如下:
bmw [business049.txt] australia [business101.txt] fuel [business049.txt, business075.txt]
实现代码
我们可以用Pandas的explode、drop_duplicates和groupby方法完成转换,具体步骤如下:
import pandas as pd # 1. 构造原始DataFrame data = { 'filename': [ 'business049.txt', 'business470.txt', 'business075.txt', 'business101.txt', 'business060.txt' ], 'keywords': [ ['bmw', 'cash', 'fuel', 'mini', 'product', 'less', 'mini'], ['saudi', 'investor', 'pick', 'savoy', 'london', 'famou'], ['eu', 'minist', 'mull', 'jet', 'fuel', 'tax', 'european'], ['australia', 'rate', 'australia', 'rais', 'benchmark'], ['insur', 'boss', 'plead', 'guilti', 'anoth', 'us', 'insur'] ] } df = pd.DataFrame(data) # 2. 将关键词列表拆分为单行记录 exploded_df = df.explode('keywords') # 3. 去重:同一文件内的重复关键词只保留一条记录 unique_df = exploded_df.drop_duplicates(subset=['filename', 'keywords']) # 4. 按关键词分组,聚合对应的文件名列表 result_df = unique_df.groupby('keywords')['filename'].apply(list).reset_index() # 5. 调整列名(可选,按需修改) result_df.columns = ['关键词', '包含该关键词的文件名列表'] # 查看结果 print(result_df)
输出结果
关键词 包含该关键词的文件名列表 0 australia [business101.txt] 1 boss [business060.txt] 2 cash [business049.txt] 3 eu [business075.txt] 4 famou [business470.txt] 5 fuel [business049.txt, business075.txt] 6 guilti [business060.txt] 7 insur [business060.txt] 8 investor [business470.txt] 9 jet [business075.txt] 10 london [business470.txt] 11 less [business049.txt] 12 minist [business075.txt] 13 mini [business049.txt] 14 mull [business075.txt] 15 product [business049.txt] 16 pick [business470.txt] 17 rais [business101.txt] 18 rate [business101.txt] 19 saudi [business470.txt] 20 savoy [business470.txt] 21 tax [business075.txt] 22 european [business075.txt] 23 us [business060.txt] 24 bmw [business049.txt] 25 anoth [business060.txt] 26 plead [business060.txt] 27 benchmark [business101.txt]
内容的提问来源于stack exchange,提问作者TruongQuocAn
相关产品推荐
相关产品推荐

