gpt4 book ai didi

python - Pandas:如果列名存在于不同列中,则将列值填充为 1

转载 作者:行者123 更新时间:2023-12-01 00:41:09 26 4
gpt4 key购买 nike

我有一个包含三列的数据框,每列包含另一个数据框的列名称或,我想填充第二个数据框的每一行与 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

此代码基于 for 循环,显然相当慢,需要更像 pandas 的东西。我也无法处理此代码中的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

所以问题实际上是,如何更快地完成此操作,以及如何删除名为 None 的列。任何见解将不胜感激。

最佳答案

使用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 不是字符串 pandas 默认删除它们:

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

关于python - Pandas:如果列名存在于不同列中,则将列值填充为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57337404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com