首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:如果列名在不同的列中,则用1填充列值。

熊猫:如果列名在不同的列中,则用1填充列值。
EN

Stack Overflow用户
提问于 2019-08-03 10:20:16
回答 1查看 326关注 0票数 1

我有一个有三列的数据帧,每一列包含另一个数据帧或None的列的名称,我想用1/0填充第二个数据帧的每一行,这取决于它的名称是否存在于第一个数据帧的三列之一。下面是一个描述预期结果的例子..。

代码语言:javascript
复制
df-1 : col_1   col_2   col_3
       -----   -----   -----
        A      None     None
        A       B        C
        D       E        B

df-2 (Initially) :  A   B   C   D   E
                    -   -   -   -   -
                    0   0   0   0   0
                    0   0   0   0   0
                    0   0   0   0   0

df-2 (expected) :   A   B   C   D   E
                    -   -   -   -   -
                    1   0   0   0   0
                    1   1   1   0   0
                    0   1   0   1   1  

请注意,第一个dataframe也包含None值,在最终结果中不需要这些值。

我写的一些代码

代码语言:javascript
复制
df_2 = pd.DataFrame(0, index = np.arange(len(df_1)), columns = column_names)
for i in range(0, len(df_1)):
  a, b, c = df_1.loc[i, :]
  df_2.loc[i, a] = 1
  df_2.loc[i, b] = 1
  df_2.loc[i, c] = 1

这个代码是基于循环的,显然速度很慢,更像熊猫所需要的。我也是,无法在这个代码中处理值。在执行上面的代码之后,结果就像.

代码语言:javascript
复制
A   B   C   D   E   None
-   -   -   -   -   ----
1   0   0   0   0    1
1   1   1   0   0    0
0   1   0   1   1    0

因此,真正的问题是,如何更快地做到这一点,以及如何删除名为None的列。任何见解都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-03 10:23:20

使用get_dummies,如果None是字符串,则删除列max,最后获取每个列名的max

代码语言:javascript
复制
df1 = pd.get_dummies(df, prefix_sep='', prefix='').drop('None', axis=1).max(level=0, axis=1)
print (df1)
   A  D  B  E  C
0  1  0  0  0  0
1  1  0  1  0  1
2  0  1  1  1  0

如果None不是字符串,默认情况下熊猫会删除它们:

代码语言:javascript
复制
print (df.applymap(type))
           col_1               col_2               col_3
0  <class 'str'>  <class 'NoneType'>  <class 'NoneType'>
1  <class 'str'>       <class 'str'>       <class 'str'>
2  <class 'str'>       <class 'str'>       <class 'str'>

df2 = pd.get_dummies(df, prefix_sep='', prefix='').max(level=0, axis=1)
print (df2)
   A  D  B  E  C
0  1  0  0  0  0
1  1  0  1  0  1
2  0  1  1  1  0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57337404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档