gpt4 book ai didi

python - 快速迭代大型数据框中的行以确定列的内容

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

对于以下数据框:

import numpy as np
import pandas as pd
df = pd.DataFrame({'chr_key': [1, 1, 1, 2, 2, 3, 4],
'position': [123,124,125,126,127,128,129],
'hit_count': [20,19,18,17,16,15,14]})

df['strand'] = np.nan

我想修改 strand 列,以便:

for i in range(0, len(df['position'])):
if df['chr_key'][i] == df['chr_key'][i+1] and df['hit_count'][i] >= df['hit_count'][i+1]:
df['strand'][i] = 'F'

else:
df['strand'][i] = 'R'

我的实际 df 超过 100k 行,因此 for 循环的速度正如人们想象的那样慢。有没有快速的方法来实现这一目标?

我修改了原始数据框。输出将是:

df = pd.DataFrame({'chr_key' : [1, 1, 1, 2, 2, 3, 4], 'position' : [123, 124, 125, 126, 127, 128, 129], 'hit_count' : [20, 19, 18, 17, 16, 15, 14], 'strand': ['R', 'R', 'F', 'R', 'F', 'F', 'F']})

因为只有3个chr_key == 1,所以当谈到第三行时,由于它没有i+1比较行,所以strand值默认为 F

最佳答案

你可以试试这个:

import pandas as pd

df = pd.DataFrame({'chr_key' : [1, 1, 1, 2, 2, 3, 4], 'position' : [123, 124, 125, 126, 127, 128, 129], 'hit_count' : [20, 19, 18, 17, 16, 15, 14]})

df['strand'] = 'R'

idx_1 = df.chr_key == df.chr_key.shift(-1)
idx_2 = df.hit_count >= df.hit_count.shift(-1)

df.loc[idx_1 & idx_2, 'strand'] = 'F'

使用 lociloc 方法访问 pandas 数据帧是更好的做法:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

关于python - 快速迭代大型数据框中的行以确定列的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716920/

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