是否有更有效或更简洁的方法来根据索引列表划分 df?

2024-04-29

我正在尝试切片/划分以下数据框

df = pd.DataFrame(
    {'time': [4, 10, 15, 6, 0, 20, 40, 11, 9, 12, 11, 25], 
     'value': [0, 0, 0, 50, 100, 0, 0, 70, 100, 0,100, 20]}    
)

根据要分割的索引列表:

[5, 7, 9]

列表的第一项和最后一项是数据帧的第一个和最后一个索引。我试图获得以下四个数据帧作为结果(由三个给定索引以及原始 df 的开头和结尾定义),每个数据帧分配给自己的变量:

   time  value
0     4      0
1    10      0
2    15      0
3     6     50
4     0    100

   time  value
5    20      0
6    40      0

   time  value
7    11     70
8     9    100

    time  value
9     12      0
10    11    100
11    25     20

我当前的解决方案为我提供了一个数据帧列表,然后我可以通过列表索引手动将其分配给变量,但代码有点复杂,我想知道是否有更简单/更有效的方法来执行此操作。

indexes = [5,7,9]
indexes.insert(0,0)
indexes.append(df.index[-1]+1)

i = 0
df_list = []
while i+1 < len(indexes):
    df_list.append(df.iloc[indexes[i]:indexes[i+1]])
    i += 1

这都是我试图回答这个问题的结果question https://stackoverflow.com/questions/66904976/slice-dataframe-at-specific-points-and-plot-each-slice/66925746#66925746。我确信有更好的方法来回答这个问题,但我确实觉得应该有一种更简单的方法来完成我想到的这种切片。


您可以使用np.split https://numpy.org/doc/stable/reference/generated/numpy.split.html like

df_list = np.split(df, indexes)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有更有效或更简洁的方法来根据索引列表划分 df? 的相关文章

随机推荐