在Pandas的各列中查找第一个非零条目

时间:2018-08-12 15:19:43

标签: python pandas

我在Pandas中有一个棘手的数据框,需要保持原样,这是格式的示例:

entry_name | entry_id | 052018 info_1 | 062018 info_2 | 052018 other_1 | 062018 other_2 |

我需要添加一个新列,该新列将检索信息的第一个非零条目的列标题,另一个列将检索其他信息的第一个非零条目的列标题(因此实际上给我们一个日期)

有什么帮助吗?

谢谢!

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)

使用filter来选择带有infoother的列,然后添加名为NaN的新列作为常规解决方案-如果只有{{1 }}行,最后按ne0)比较值,并按idxmax获取前!=的列:

True