如何在Pandas中动态将以下代码转换为简单的一行?就像我总是有三个数字的范围一样,然后查找数据是否介于两者之间?
dataA = data.groupby('ID').apply(lambda x: (len(x) > 3) & (len(x) < 6))
dataB = data.groupby('ID').apply(lambda x: (len(x) > 6) & (len(x) < 9))
dataC = data.groupby('ID').apply(lambda x: (len(x) > 9) & (len(x) < 12))
答案 0 :(得分:2)
我假设您的目标是根据每个组的大小将数据框分成几组。
您可以避免使用字典来创建额外的变量。您还可以避免使用列表为每个切片手动定义边界。最后,您可以一次执行计算每个组的大小。
L = [3, 6, 9, 12]
sizes = data.groupby('ID')['SOME_COL'].transform('size') # SOME_COL can be any series
data = {}
for key, (len1, len2) in zip('ABC', zip(L, L[1:])):
data[key] = data.loc[sizes.between(len1, len2, inclusive=False)]
或者,您可以将以上内容表达为字典理解:
data = {key: data.loc[sizes.between(len1, len2, inclusive=False)] \
for key, (len1, len2) in zip('ABC', zip(L, L[1:]))}