忽略 pandas DataFrame 中的行

3

我有一个名为reassembly的列表,组织方式如下:

['AFLT', 228468.0, 'B'],
['TATN', 1108.6, 'B'],
['TATN', 4434.4, 'B'],
['MOEX', 3480.0, 'S'],
['YNDX', 5934.0, 'B'],
['MTSS', 36003.0, 'S'],
['SBERP', 33837.1, 'S'],
['SBERP', 1780.8, 'S'],
['MTSS', 3273.0, 'S'],
['AFLT', 124356.0, 'B'],
['AFLT', 20244.0, 'B'],
['MGNT', 72990.0, 'B'],
['NLMK', 230917.0, 'B'],
['NLMK', 156050.0, 'B'],
['NLMK', 31220.0, 'B'],
['MGNT', 36450.0, 'S'],
['TCSG', 14045.2, 'S'],
['TCSG', 2160.4, 'S'],

还有一个名为medians的字典,它包含以下数据:

{'TATNP': 11968.05, 'TCSG': 8647.2, 'TRNFP': 130250.0, 'UPRO': 7941.0, 'VTBR': 3828.28, 'YNDX': 17660.4}

字典中的键相当于列表中的第一个值(' AFLT',' VTBR '和其他)

我将重新组装转换为pandas:

df = pd.DataFrame(reassembly, columns=['ticker','vol','operation'])

现在我想要做类似以下的事情:

df = df[df['vol'] < median['ticker']]

如果这个股票脚本的vol < median,那么应该忽略它。

请帮我正确编写这段代码。

3个回答

4
你想要使用map
high_volumes = df[df['vol'] > df['ticker'].map(medians)]

# do suff with high volume transaction

请注意,如果您没有medians中的所有tickers,上面的操作可能会失败。如果你想要保留那些不在medians中的所有tickers,则可以这样做:
meds = df['ticker'].map(medians)
high_volumes = df[(df['vol']>meds)|(meds.isna())]

它有效了!如何让它更复杂:df['ticker'].map(medians)乘以x?我的意思是medians['ticker'] * x。 - Igor K.
如果x是一个数字,那么请执行meds = df['ticker'].map(medians) * x - Quang Hoang

2

df = df[df['vol'] > df['ticker'].map(median)]


0
我建议使用列表推导式来解决这个问题,然后将结果传递给Pandas。
reassembly = [['AFLT', 228468.0, 'B'],
['TATN', 1108.6, 'B'],
['TATN', 4434.4, 'B'],
['MOEX', 3480.0, 'S'],
['YNDX', 5934.0, 'B'],
['MTSS', 36003.0, 'S'],
['SBERP', 33837.1, 'S'],
['SBERP', 1780.8, 'S'],
['MTSS', 3273.0, 'S'],
['AFLT', 124356.0, 'B'],
['AFLT', 20244.0, 'B'],
['MGNT', 72990.0, 'B'],
['NLMK', 230917.0, 'B'],
['NLMK', 156050.0, 'B'],
['NLMK', 31220.0, 'B'],
['MGNT', 36450.0, 'S'],
['TCSG', 14045.2, 'S'],
['TCSG', 2160.4, 'S']]

medians = {'TATNP': 11968.05, 'TCSG': 8647.2, 'TRNFP': 130250.0, 'UPRO': 7941.0, 'VTBR': 3828.28, 'YNDX': 17660.4}

ready_for_panda = [x for x in reassembly if x[0] in medians and x[1] > medians[x[0]]]

pd.DataFrame(ready_for_panda, columns=["ticker", "vol", "operation"])


ticker  vol      operation
TCSG    14045.2  S

我假设您想从重新组装中过滤掉任何当前股票的体积小于当前中位数的元素。


通常情况下,列表推导式比pandas的矢量化函数慢。 - Quang Hoang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接