gpt4 book ai didi

python - Pandas 迭代 DataFrame 行对

转载 作者:行者123 更新时间:2023-12-02 06:57:09 25 4
gpt4 key购买 nike

如何迭代 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 但这些方法似乎都没有达到我想要的效果。

编辑:总体目标是获取一个 bool 列表,指示“间隔”列中的间隔是否重叠。在上面的示例中,列表将是

overlaps = [True, False, False]

所以每一对都有一个 bool 值。

最佳答案

使用axis=1移动数据帧并将其连接回原始数据,以便每个间隔和下一个间隔位于同一行

df_merged = pd.concat([df, df.shift(-1).add_prefix('next_')], axis=1)
df_merged
#Out:
a b interval next_a next_b next_interval
0 1 2 [1, 3] 3.0 4.0 [2, 4]
1 3 4 [2, 4] 5.0 6.0 [6, 9]
2 5 6 [6, 9] 7.0 8.0 [9, 10]
3 7 8 [9, 10] NaN NaN NaN

定义一个与列表表示一起使用的相交函数,并应用于合并的数据框,忽略 shifted_interval 为空的最后一行

def intersects(left, right):
return left[1] > right[0]

df_merged[:-1].apply(lambda x: intersects(x.interval, x.next_interval), axis=1)
#Out:
0 True
1 False
2 False
dtype: bool

关于python - Pandas 迭代 DataFrame 行对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com