返回第一个非零值的列名

我有一个数据框如下所示:


name company count_2017 count_2018 count_2019 last_id

joe     abc     0           1         2         230283

cindy   bcd     0           0         3         239382

john    cde     1           1         0          238372

wang    def     0           0         3          1332

我输入代码为:


df.apply(lambda x: x.iloc[x.nonzero()[0][0]], axis=1)

此代码将返回第一个非零值,但是我希望构建一个返回列名称的数据框。返回的数据框如下所示:


name count_2017 count_2018 count_2019  new_col

joe   0           1         2           2018

cindy 0           0         3           2019

john  1           1         0           2017

wang  0           0         3           2019

new_col = 第一个非零值的列名(删除 count_)。有没有办法从我现有的代码中进行编辑并返回 new_col ?


繁星点点滴滴
浏览 120回答 2
2回答

临摹微笑

你可以试试这个:columns = df.select_dtypes(int).columnsdf["new_col"] = (df.select_dtypes(int)                 .gt(0)                 .dot(columns.str[-4:] + " ")                 .str.split()                 .str[0])df    name    count_2017  count_2018  count_2019  new_col0   joe         0           1           2       20181   cindy       0           0           3       20192   john        1           1           0       20173   wang        0           0           3       2019

海绵宝宝撒

如果你的 DataFrame 看起来像:    name  count_2017  count_2018  count_20190    joe           0           1           21  cindy           0           0           32   john           1           1           03   wang           0           0           3然后:df['new_col'] = df.iloc[:, 1:].apply(lambda x: next(c for v, c in zip(x, x.index) if v!=0).split('_')[-1], axis=1)print(df)印刷:    name  count_2017  count_2018  count_2019 new_col0    joe           0           1           2    20181  cindy           0           0           3    20192   john           1           1           0    20173   wang           0           0           3    2019
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python