如果有两个数据帧(pandas.dataframe),每个数据帧如下所示。 让我们把第一个称为df_A
code1 code2 code3 code4 code5
0 1 4 2 0 0
1 3 2 1 5 0
2 2 3 0 0 0
has1 has2 has3 has4 has5
0 1 1 0 1 0
1 1 1 0 0 1
2 0 1 1 0 0
每个对象(行)最多给出5个代码,由第一个DF中的5个列示出来。相反,我想要每个对象所具有的wich代码的二进制表示。 如第二份DF所示。 pandas或scikit-learn中的函数会考虑代码的位置,这并不重要。
由于我在python和Pandas方面的经验不足,我用自己的代码进行的尝试都没有奏效。
这个例子不同于我在堆栈溢出上看到的其他例子,因为所有的列都代表相同的东西。
谢谢!
编辑:
for colname in df_bin.columns:
for row in range(len(df_codes)):
if int(colname) in df_codes.iloc[[row]]:
df_bin[colname][row]=1
this is one of the attempts i have made so far.
您可以尝试stack
然后str.get_dummies
s=df.stack().loc[lambda x : x!=0].astype(str).str.get_dummies().sum(level=0).add_prefix('Has')
Has1 Has2 Has3 Has4 Has5
0 1 1 0 1 0
1 1 1 1 0 1
2 0 1 1 0 0
让我们试试:
(df.stack().groupby(level=0)
.value_counts()
.unstack(fill_value=0)
[range(1,6)]
.add_prefix('has')
)
输出:
has1 has2 has3 has4 has5
0 1 1 0 1 0
1 1 1 1 0 1
2 0 1 1 0 0