用条件迭代Pandas数据帧

2024-09-28 05:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遍历一个大数据帧。但是,我不知道如何包含一些条件。以下是我的数据帧示例:

       0        1        2    3
0  chr3R  4174822  4174922    1.0
1  chr3R  4175400  4175500    0.0
2  chr3R  4175466  4175566    0.5
3  chr3R  4175521  4175621    1.0
4  chr3R  4175603  4175703    0.0

我想遍历这些行,找到x行第1列与第1行第1列的差值小于5000的行。如果x行与第1行之间的差小于5000,则选择第3列中x到1行的值以放入列表中。然后我想在整个数据帧中迭代这个条件,并为第3列的值创建一个列表。在

我尝试使用iterrows(),但我只是浏览了整个数据帧,什么也没有得到。在

谢谢。在

罗德里戈


Tags: 数据示例列表条件iterrows差值chr3r
3条回答

这可以不使用iterrows来完成。所有这些都可以。另一种方法是使用np.哪里从包纽比。这是一个例子。根据您的要求修改。在

    import numpy as np 
    df['newcol'] = np.where(df[1]- df[1].iloc[0] <  5000, 1, df[1])
    dfList = df['newcol'].tolist()
>>> df[(df.iloc[:, 1] - df.iat[1, 1]) < 5000][3].tolist()
[1.0, 0.0, 0.5, 1.0, 0.0]

df.iloc[:, 1]选择第1列中的所有行,用df.iat[1, 1]减去第一行和第一列的值,然后过滤小于5000的值。在

最后的[3]选择第三列(它将返回一个序列)。但是,由于需要一个列表,所以只需将.tolist()附加到结果中。在

让我们以您的数据集为例,再添加一些行。在

>>> import pandas as pd
>>> data = pd.DataFrame([
...     ['chr3R', 4174822, 4174922, 1.0],
...     ['chr3R', 4175400, 4175500, 0.0],
...     ['chr3R', 4175466, 4175566, 0.5],
...     ['chr3R', 4175521, 4175621, 1.0],
...     ['chr3R', 4175603, 4175703, 0.0],
...     ['chr3R', 5005603, 4175703, 0.0],   # col 1 is more than 5000 away
...     ['chr3R', 6005603, 4175703, 0.0],   # col 1 is more than 5000 away
... ])

添加最后两行是为了显示列1比4174822(列1的第一个值)高5000多的行示例

您可以过滤掉第一个值4174822的5000以内的值,如下所示:

^{pr2}$

。。。然后使用.iterrows()进行迭代。在

>>> for index, row in subset.iterrows():
...     # do something with row

相关问题 更多 >

    热门问题