如何循环数据框列以迭代地对数据框进行排序

时间:2019-11-18 12:43:21

标签: python pandas loops sorting dataframe

我需要根据所有列的不同列对数据框进行排序,并且我想使用循环来实现。所以我需要类似的东西:

for j in range(nC):

    Elab1 = Elab1.sort_values([j, 13])
    Elab1 = Elab1.reset_index(drop=True)


    for i in range(L_GI-1):


        if Elab1.at[i+1, j] == Elab1.at[i, j] :


            Elab1.at[i+1, j+nC] = Elab1.at[i, j+nC] 

L_GInC分别是我的数据框的行和列数:Elab1,而j和13是我要使用的数据框的列位置作为排序索引。

虽然这适用于循环行,但不适用于列,因为我猜想使用方法at,我需要它们的名称。
有没有一种方法可以代替方法at来使用,如我的代码所示?

2 个答案:

答案 0 :(得分:1)

只需使用iloc而不是at

Elab1.iloc[i+1, j] == Elab1.iloc[i,j]

答案 1 :(得分:0)

已解决:

替代

def request():
    s = requests.Session
    r = s.get(url)
    return r
def data(r):
    soup = BeautifulSoup(r.text, 'lxml')
    list = soup.select('.class')
    return list
def loop(list):
    n = 10
    while True:
        len(list) != n
        if len(list) == n:
            print('Lorem ipsum')
            main()
        else:
            return len(list)
def main():
    r = request()
    list = data(r)
    len(list) = loop(list)

if __name__ == "__main__":
    main()

使用

    if Elab1.at[i+1, j] == Elab1.at[i, j] :


        Elab1.at[i+1, j+nC] = Elab1.at[i, j+nC] 

并替换

    if Elab1.iloc[i+1, j+nC] == Elab1.iloc[i, j+nC] :

            Elab1.iloc[i+1, j] = Elab1.iloc[i, j] 

使用

[j, 13] 

其中

[columns_names_array[j], "constant_column_name"]

@LeoE最好的答案是正确的方法。