如何用切片列表索引熊猫数据框

时间:2020-04-10 18:12:48

标签: pandas numpy dataframe

我有两个数据帧,retbins。我想从bins获取索引值,为bins中的每一行创建一个范围,然后使用该范围列表从ret中选择数据。当我传递切片索引(手动键入)时,这种方式可以工作,但是当我传递保存在变量a

中的列表时,该方法不起作用
ret = pd.DataFrame({'px': [.1, -.15, .30, -.20, .05]})
bins = pd.DataFrame({'t1': [3,4]}, index=[1,2])
a = []
for i, b in bins.iterrows():
    a.append(slice(i, b.t1))

print('a',a)
print('np.r_[a]',np.r_[a])
print('np.r[slice',np.r_[slice(1, 3, None) , slice(1, 4, None)])
print(ret.iloc[np.r_[slice(1, 3, None) , slice(1, 4, None)]]) # this WORKS
print(ret.iloc[a] #this DOES NOT WORK)

这是输出:

a [slice(1, 3, None), slice(2, 4, None)]
np.r_[a] [slice(1, 3, None) slice(2, 4, None)]
np.r[slice [1 2 1 2 3]
     px
1 -0.15
2  0.30
1 -0.15
2  0.30
3 -0.20
...
TypeError: int() argument must be a string, a bytes-like object or a number, not 'slice'

1 个答案:

答案 0 :(得分:0)

要在这里回答我自己的问题!问题是slice()太笨重而无法使用。更容易将数组列表展平。如果有人有任何建议,请在此处发布!

ret = pd.DataFrame({'px': [.1, -.15, .30, -.20, .05]})
bins = pd.DataFrame({'t1': [3,4]}, index=[1,2])
a = [ret[i:b.t1].index for i, b in bins.iterrows()]
out = [item for sublist in a for item in sublist]
print(ret.loc[out])
>>>     px
>>>1 -0.15
>>>2  0.30
>>>2  0.30
>>>3 -0.20