Python pandas slice dataframe by multiple index ranges

走远了吗. 提交于 2020-01-18 04:41:06

问题


What is the pythonic way to slice a dataframe by more index ranges (eg. by 10:12 and 25:28)?

I want this in a more elegant way:

df = pd.DataFrame({'a':range(10,100)})
df.iloc[[i for i in range(10,12)] + [i for i in range(25,28)]]

Result:

     a
10  20
11  21
25  35
26  36
27  37

Something like this would be more elegant:

df.iloc[(10:12, 25:28)]

回答1:


You can use numpy's r_ "slicing trick":

df = pd.DataFrame({'a':range(10,100)})
df.iloc[pd.np.r_[10:12, 25:28]]

Gives:

     a
10  20
11  21
25  35
26  36
27  37



回答2:


You can take advantage of pandas isin function.

df = pd.DataFrame({'a':range(10,100)})
ls = [i for i in range(10,12)] + [i for i in range(25,28)]
df[df.index.isin(ls)]


    a
10  20
11  21
25  35
26  36
27  37


来源:https://stackoverflow.com/questions/39393856/python-pandas-slice-dataframe-by-multiple-index-ranges

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!