为了账号安全,请及时绑定邮箱和手机立即绑定

返回第一个非零值的列名

返回第一个非零值的列名

繁星点点滴滴 2023-08-03 17:30:50
我有一个数据框如下所示:name company count_2017 count_2018 count_2019 last_idjoe     abc     0           1         2         230283cindy   bcd     0           0         3         239382john    cde     1           1         0          238372wang    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_coljoe   0           1         2           2018cindy 0           0         3           2019john  1           1         0           2017wang  0           0         3           2019new_col = 第一个非零值的列名(删除 count_)。有没有办法从我现有的代码中进行编辑并返回 new_col ?
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

你可以试试这个:


columns = df.select_dtypes(int).columns


df["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_col

0   joe         0           1           2       2018

1   cindy       0           0           3       2019

2   john        1           1           0       2017

3   wang        0           0           3       2019


查看完整回答
反对 回复 2023-08-03
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

如果你的 DataFrame 看起来像:


    name  count_2017  count_2018  count_2019

0    joe           0           1           2

1  cindy           0           0           3

2   john           1           1           0

3   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_col

0    joe           0           1           2    2018

1  cindy           0           0           3    2019

2   john           1           1           0    2017

3   wang           0           0           3    2019


查看完整回答
反对 回复 2023-08-03
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信