如何用Pandas按相同时间戳分组并合并字符串为唯一Token集合?
按时间戳分组并合并唯一Token字符串的解决方案
核心思路
先按时间戳对数据集分组,再对每个分组内的字符串进行Token拆分、去重,最后将去重后的Token合并为单个字符串。下面以Python的pandas库为例给出具体实现:
代码实现
import pandas as pd # 模拟原始数据集(替换成你实际的读取逻辑,比如pd.read_csv()/pd.read_excel()) data = { 'date': ['2011-02-01 15:00:00'] * 5, 'string': [ 'Richmond Service Index', 'S&P/CS HPI Composite - 20 s.a. n.s.a', 'Texas Services Sector Outlook', 'TIC Net Long-Term Transactions including Swaps', 'Richmond Service Index' # 包含重复Token的示例 ] } df = pd.DataFrame(data) # 定义分组处理函数:拆分Token、去重(保留首次出现顺序)、合并 def process_group(strings): # 按空格拆分所有字符串为Token(可根据实际分隔符调整,比如split(', ')) all_tokens = [] for s in strings: all_tokens.extend(s.split()) # 去重并维持原始顺序 unique_tokens = list(dict.fromkeys(all_tokens)) # 合并为单个字符串 return ' '.join(unique_tokens) # 按时间戳分组,应用处理函数 result_df = df.groupby('date')['string'].apply(process_group).reset_index() # 查看结果 print(result_df)
关键细节说明
- Token拆分:默认按空格分割,若你的字符串使用其他分隔符(逗号、分号等),直接修改
split()的参数即可。 - 去重逻辑:
dict.fromkeys()可以在去重的同时保留Token首次出现的顺序;若不关心顺序,也可以用list(set(all_tokens)),但会打乱原有顺序。 - 批量数据适配:如果你的数据来自CSV/Excel文件,把模拟数据部分替换成
pd.read_csv('你的文件路径.csv')即可直接使用。
可选SQL实现思路(适合简单场景)
如果用MySQL处理,可通过GROUP_CONCAT结合DISTINCT实现:
SELECT date, GROUP_CONCAT(DISTINCT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(string, ' ', n), ' ', -1)) SEPARATOR ' ') AS string FROM your_table -- 这里的数字序列需根据最长字符串的Token数量调整 JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) numbers ON CHAR_LENGTH(string) - CHAR_LENGTH(REPLACE(string, ' ', '')) >= n - 1 GROUP BY date;
注:SQL方式灵活性较低,复杂场景优先推荐Python处理。
内容的提问来源于stack exchange,提问作者Kevin Putra Santoso
相关产品推荐
相关产品推荐

