如何为首次出现某个特定值的每一行返回列索引

时间:2019-07-29 20:16:13

标签: python-3.x pandas

我在熊猫中有一个数据框,其中每一行的不同列中都有1个出现。一行中第一次出现1的列对于不同的行是不同的。我需要创建一个附加列(列索引),在其中我想返回该行中第一次出现1的列的索引号。

import time


# Changed the quoting to be cleaner.
def dostuff():
    print("I'm doing stuff!")

def dosthings():
    print("I'm doing things!")

def dosomething():
    print("I'm doing something!")


if __name__ == '__main__':
    x = 5
    clock = -x  # So that (time.perf_counter() >= clock + x) on the first round

    while True:
        dostuff()
        print('I did stuff')

        if time.perf_counter() >= clock + x:
            # Runs once every `x` seconds.
            dosthings()
            print('I did things')
            clock = time.perf_counter()

        dosomething()
        print('I did something')

        time.sleep(1)  # Just to see the execution clearly.

任何人都可以提供对熊猫有用的代码会很有帮助。 预先感谢。

3 个答案:

答案 0 :(得分:2)

您始终可以编写一个简单的函数,然后在数据框上使用Apply。

def get_first(row):
    for i, col in enumerate(row.index.tolist()):
        if row[col] == 1:
            return i

df['column_index'] = df.apply(get_first, axis=1)

用熊猫做这件事可能是一个很酷的技巧,但这是可行的。

如果您不想编写函数,也可以这样做,但是它的可读性很差

df['first_col'] = df.apply(lambda row: [row.index.tolist().index(c) for c in row.index.tolist() if row[c] == 1][0], axis=1)

答案 1 :(得分:2)

来自idxmax的简单get_indexerdf.columns

df['column_index'] = df.columns.get_indexer(df.drop('IDs',1).idxmax(1))+1

Out[52]:
    IDs  q1  q2  q3  q4  q5  q6  q7  q8  column_index
0  1111   0   0   0   1   0   0   0   1             5
1  1122   0   0   1   0   0   1   0   0             4

答案 2 :(得分:1)

尝试一些非常重要的事情,例如:

for i in range(df.iloc[:,0].size):

    j=0
    while df.iloc[i,j]=!1:
        df.iloc[i,'index column']=j
        j=j+1

致谢