#pandas
Вопрос:
Вопрос
Учитывая, что groupedMarket = df.groupby("Market")
Как создать новый столбец Related_Markets
со строками, объединенными "Ticker" "-" "Time" "-" "Signal"
для других членов 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'])
Фрейм данных
Signal Ticker Time Market
0 Bull_Flag EURUSD W FX
1 Bull_Candle GBPUSD D FX
2 Bull_Volume UK100 H1 Index
3 Bear_Volume USDCHF W FX
Желаемый Результат
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
Если другого члена группы не существует, это может быть либо пустая строка ""
, либо NaN
.
Комментарии:
1. или другие участники groupedMarket — есть ли здесь выбор или это просто случайное исключение текущей строки?
2. Он говорит, что для меня случайен, исключая текущую строку , но есть причина, по которой я хотел бы уточнить. Надеюсь, вы понимаете. Также ИМО , лучше изложить это в тексте вопроса..!! ( поскольку комментарии являются временными )
3. Все остальные члены группы, за исключением текущей строки IIUC, в соответствии с желаемым результатом. Спасибо
Ответ №1:
Вот решение с использованием наборов python и apply
:
df['key'] = df[['Ticker', 'Granularity', "Signal"]].apply('-'.join, axis=1)
markets = df.groupby('Market')['key'].apply(set)
df['related-markets'] = df.apply(lambda s: ', '.join(markets[s['Market']].difference([s['key']])), axis=1)
df.drop('key', axis=1)
выход:
Signal Ticker Granularity 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
ПРИМЕЧАНИЕ. в вашем вопросе были несоответствия, такие как время/детализация, надеюсь, вы легко адаптируетесь