pands遍历DataFrame行对
如何在Pandas DataFrame的成对行上进行迭代?
例如:
content = [(1,2,[1,3]),(3,4,[2,4]),(5,6,[6,9]),(7,8,[9,10])]
df = pd.DataFrame( content, columns=["a","b","interval"])
print df
输出:
a b interval
0 1 2 [1, 3]
1 3 4 [2, 4]
2 5 6 [6, 9]
3 7 8 [9, 10]
现在我想做些类似的事情
for (indx1,row1), (indx2,row2) in df.?
print "row1:\n", row1
print "row2:\n", row2
print "\n"
应该输出
row1:
a 1
b 2
interval [1,3]
Name: 0, dtype: int64
row2:
a 3
b 4
interval [2,4]
Name: 1, dtype: int64
row1:
a 3
b 4
interval [2,4]
Name: 1, dtype: int64
row2:
a 5
b 6
interval [6,9]
Name: 2, dtype: int64
row1:
a 5
b 6
interval [6,9]
Name: 2, dtype: int64
row2:
a 7
b 8
interval [9,10]
Name: 3, dtype: int64
有内置的方法可以做到这一点吗?我看了df.groupby(df.index // 2)和df.itertuples,但是这些方法似乎都不符合我的要求。
编辑: 总体目标是获取布尔列表,以指示“间隔”列中的间隔是否重叠。在上面的示例中,列表为
overlaps = [True, False, False]
所以每对一个布尔。
-
如果您想保持循环
for
,使用zip
和iterrows
可能是一种方法for (indx1,row1),(indx2,row2) in zip(df[:-1].iterrows(),df[1:].iterrows()): print "row1:\n", row1 print "row2:\n", row2 print "\n"
要同时访问下一行,请使用后在第二行开始下一行
df[1:].iterrows()
。您将以所需的方式获得输出。row1: a 1 b 2 Name: 0, dtype: int64 row2: a 3 b 4 Name: 1, dtype: int64 row1: a 3 b 4 Name: 1, dtype: int64 row2: a 5 b 6 Name: 2, dtype: int64 row1: a 5 b 6 Name: 2, dtype: int64 row2: a 7 b 8 Name: 3, dtype: int64
但是正如@RafaelC所说,执行
for
循环可能不是解决一般问题的最佳方法。