微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用pandas / numpy数据框操纵特定列(示例要素)以另一列的条目(特征值)为条件

我的输入数据框(缩写)如下所示:

>>> import numpy as np
>>> import pandas as pd

>>> df_in = pd.DataFrame([[1, 2, 'a', 3, 4], [6, 7, 'b', 8, 9]],
...                     columns=(['c1', 'c2', 'col', 'c3', 'c4']))
>>> df_in
   c1  c2 col  c3  c4
0   1   2   a   3   4
1   6   7   b   8   9

它应该被操纵,即

如果’col'(feature)列中的row(sample)具有特定值(例如,’b’在这里),
然后将同一行中’c1’和’c2’列中的条目转换为NumPy.NaNs.

想要的结果:

>>> df_out = pd.DataFrame([[1, 2, 'a', 3, 4], [np.nan, np.nan, np.nan, 8, 9]], 
                         columns=(['c1', 'c2', 'col', 'c3', 'c4']))
>>> df_out
    c1  c2 col  c3  c4
0    1   2   a   3   4
1  NaN NaN   b   8   9

到目前为止,我设法通过代码获得所需的结果

>>> dic = {'col' : ['c1', 'c2']}          # auxiliary

>>> b_w = df_in[df_in['col'] == 'b']      # Subset with 'b' in 'col'
>>> b_w = b_w.drop(dic['col'], axis=1)    # ...inject np.nan in 'c1', 'c2'

>>> b_wo = df_in[df_in['col'] != 'b']     # Subset without 'b' in 'col'

>>> df_out = pd.concat([b_w, b_wo])       # Both Subsets together again
>>> df_out
    c1   c2  c3  c4 col
1  NaN  NaN   8   9   b
0  1.0  2.0   3   4   a

虽然我得到了我想要的东西(原始数据完全由浮点数组成,但不是
打扰从int变为浮动她),这是一个相当不优雅的
代码片段.我的有根据的猜测是,这可以更快地完成
通过使用pandas和numpy的内置函数,但我无法管理它.

有关如何以快速有效的方式对其进行日常编码的任何建议吗?任何帮助都非常感谢.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐