我在熊猫中有一个数据框,其中每一行的不同列中都有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.
任何人都可以提供对熊猫有用的代码会很有帮助。 预先感谢。
答案 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_indexer
和df.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
致谢