You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按Market分组后为DataFrame生成Related_Markets拼接列的实现方案

解决方案

实现思路

  • 先为每一行生成Ticker-Time-Signal格式的临时拼接字符串
  • 按Market分组后,对每个分组内的每一行,排除当前行本身,将组内其余行的临时字符串拼接为结果
  • 最后删除临时列得到最终结果,若已提前构造groupedMarket分组对象可直接复用,无需重复分组

完整代码

import pandas as pd
import numpy as np

# 示例数据构造
dat = [["Bull_Flag","EURUSD","W","FX"],["Bull_Candle","GBPUSD","D","FX"],["Bull_Volume","UK100","H1","Index"],["Bear_Volume","USDCHF","W","FX"]]
df = pd.DataFrame(dat,columns=['Signal', 'Ticker', 'Time', 'Market'])

# 你已提前执行的分组代码
groupedMarket = df.groupby("Market")

# 步骤1:生成每行的临时拼接字符串
df['tmp_str'] = df['Ticker'] + '-' + df['Time'] + '-' + df['Signal']

# 步骤2:分组计算关联市场字段,直接复用已有的groupedMarket对象
def calc_related(str_series):
    result_list = []
    for idx in str_series.index:
        # 排除当前行,拼接其余行的字符串,默认用逗号+空格分隔,需空格分隔可修改sep参数为' '
        other_strs = str_series[str_series.index != idx]
        result_list.append(other_strs.str.cat(sep=', ') if len(other_strs) > 0 else '')
    return result_list

df['Related_Markets'] = groupedMarket['tmp_str'].transform(calc_related)

# 步骤3:删除临时列
df.drop('tmp_str', axis=1, inplace=True)

# 输出结果
print(df)

输出验证

运行后结果与期望一致:

Signal  Ticker Time Market                        Related_Markets
0    Bull_Flag  EURUSD    W     FX  GBPUSD-D-Bull_Candle, USDCHF-W-Bear_Volume
1  Bull_Candle  GBPUSD    D     FX   EURUSD-W-Bull_Flag, USDCHF-W-Bear_Volume
2  Bull_Volume   UK100   H1  Index                                           
3  Bear_Volume  USDCHF    W     FX    EURUSD-W-Bull_Flag, GBPUSD-D-Bull_Candle

内容的提问来源于stack exchange,提问作者nipy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:09:03