我在Pandas中有一个棘手的数据框,需要保持原样,这是格式的示例:
entry_name | entry_id | 052018 info_1 | 062018 info_2 | 052018 other_1 | 062018 other_2 |
我需要添加一个新列,该新列将检索信息的第一个非零条目的列标题,另一个列将检索其他信息的第一个非零条目的列标题(因此实际上给我们一个日期)
有什么帮助吗?
谢谢!
答案 0 :(得分:1)
让我们生成一个模拟您的DataFrame
:
>>> df=pd.DataFrame(random.randint(3,size=(8,5)),columns=list("abcde"))
>>> df
a b c d e
0 2 2 1 2 2
1 1 2 2 0 2
2 0 2 1 0 2
3 2 1 1 0 1
4 0 1 0 0 0
5 0 0 2 0 1
6 2 0 1 1 2
7 2 0 0 0 0
然后numpy.argmax()
可用于查找每行中第一个非零值的位置(您可以修改非空字符串等的条件):
>>> argmax(df.values!=0,axis=1)
array([0, 0, 1, 0, 1, 2, 0, 0], dtype=int64)
让我们将该字段转换为df
标头中的值后,将其附加到df
:
>>> df['first_nonzero']=df.keys()[argmax(df.values!=0,axis=1)]
>>> df
a b c d e first_nonzero
0 2 2 1 2 2 a
1 1 2 2 0 2 a
2 0 2 1 0 2 b
3 2 1 1 0 1 a
4 0 1 0 0 0 b
5 0 0 2 0 1 c
6 2 0 1 1 2 a
7 2 0 0 0 0 a
Voila!
答案 1 :(得分:1)