我有一个包含三列的数据框,每一列包含另一个数据框或None
的一列的名称,我想用{{填充第二个数据框的每一行1}},具体取决于其名称是否在第一个数据帧的三列之一中。这是描述所需结果的示例...
1/0
请注意,第一个数据帧也包含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
个值,最终结果中不需要这些值。
我写的一些代码
None
此代码是基于循环的,显然很慢,需要更多类似的熊猫。我也无法处理此代码中的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
值。执行完上面的代码后,结果类似于...
None
实际上,问题是,如何更快地执行此操作,以及如何删除名为A B C D E None
- - - - - ----
1 0 0 0 0 1
1 1 1 0 0 0
0 1 0 1 1 0
的列。任何见解将不胜感激。
答案 0 :(得分:2)
使用get_dummies
,如果None
是字符串,则删除列None
,最后每列名称得到max
:
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
不是字符串,大熊猫会默认将其删除:
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