获取pandas行的变量no w.r.t.进行字典查找



在此示例数据帧df:中

import pandas as pd
import numpy as np
import random, string
max_rows = {'A': 3, 'B': 2, 'D': 4} # max number of rows to be extracted
data_size = 1000
df = pd.DataFrame({'symbol': pd.Series(random.choice(string.ascii_uppercase) for _ in range(data_size)),
'qty': np.random.randn(data_size)}).sort_values('symbol')

如何从字典中获取具有可变行的数据帧?

尝试使用[df.groupby('symbol').head(i) for i in df.symbol.map(max_rows)]。它会发出运行时警告,看起来非常不正确。

您可以使用列表理解的concat

print (pd.concat([df.loc[df["symbol"].eq(k)].head(v) for k,v in max_rows.items()]))
symbol       qty
640      A -0.725947
22       A -1.361063
190      A -0.596261
451      B -0.992223
489      B -2.014979
593      D  1.581863
600      D -2.162044
793      D -1.162758
738      D  0.345683

使用groupby+cumcountdf.query添加另一个方法

df.assign(v=df.groupby("symbol").cumcount()+1,k=df['symbol'].map(max_rows)).query("v<=k")

或者不分配额外列#thanks @jezrael的相同逻辑

df[df.groupby("symbol").cumcount()+1 <= df['symbol'].map(max_rows)]

symbol       qty
882      A -0.249236
27       A  0.625584
122      A -1.154539
229      B -1.269212
55       B  1.403455
457      D -2.592831
449      D -0.433731
634      D  0.099493
734      D -1.551012

最新更新