ale*_*inn 3 python iteration pandas
我有一个 Pandas DataFrame,需要将其以 n 行的块形式输入下游函数(print在示例中)。块可能具有重叠的行。
让我们从一个虚拟的 DataFrame 开始:
d = {'A':list(range(1000)), 'B':list(range(1000))}
df=pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
在具有 1 行重叠的 2 行块的情况下,我有以下代码:
a = df.index.values[:-1]
for i in a:
print(df.iloc[i:i+2])
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
...
A B
996 996 996
997 997 997
A B
997 997 997
998 998 998
A B
998 998 998
999 999 999
Run Code Online (Sandbox Code Playgroud)
这正是我想要的。
是否有更好/更快的方法来迭代 pandas.DataFrame 的 n 行块?
DataFrame.groupby与使用相同长度创建的辅助 1d 数组一起使用整数除法,例如df- 索引值不重叠:
d = {'A':list(range(5)), 'B':list(range(5))}
df=pd.DataFrame(d)
print (np.arange(len(df)) // 2)
[0 0 1 1 2]
for i, g in df.groupby(np.arange(len(df)) // 2):
print (g)
A B
0 0 0
1 1 1
A B
2 2 2
3 3 3
A B
4 4 4
Run Code Online (Sandbox Code Playgroud)
编辑:
对于重叠值编辑此答案:
def chunker1(seq, size):
return (seq.iloc[pos:pos + size] for pos in range(0, len(seq)-1))
for i in chunker1(df,2):
print (i)
A B
0 0 0
1 1 1
A B
1 1 1
2 2 2
A B
2 2 2
3 3 3
A B
3 3 3
4 4 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |