pands遍历DataFrame行对

发布于 2021-01-29 17:31:46

如何在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]

所以每对一个布尔。

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您想保持循环for,使用zipiterrows可能是一种方法

    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循环可能不是解决一般问题的最佳方法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看