假设我有以下数据帧df
:
A B C
0 mom;dad;son; sister;son; yes;no;maybe;
1 dad; daughter;niece; no;snow;
2 son;dad; cat;son;dad; tree;dad;son;
3 daughter;mom; niece; referee;
4 dad;daughter; cat; dad;
您要检查在A
、B
和C
列之间是否有一个公共词,并创建一个D
列,其中1
如果有,而0
如果没有。对于一个词来说,只要出现在三栏中的两栏就足够了。你知道吗
结果应该是:
A B C D
0 mom;dad;son; sister;son; yes;no;maybe; 1
1 dad; daughter;niece; no;snow; 0
2 son;dad; cat;son;dad; tree;dad;son; 1
3 daughter;mom; niece; referee; 0
4 dad;daughter; cat; dad; 1
我试图通过以下方式实现这一点:
for index, row in df.iterrows():
w1=row['A'].split(';')
w2=row['B'].split(';')
w3=row['C'].split(';')
if len(set(w1).intersection(w2))>0 or len(set(w1).intersection(w3))>0 or len(set(w2).intersection(w3))>0:
df['D'][index]==1
else:
df['D'][index]==0
但是,生成的D
列只带有0
,因为(可能)我没有将w1中的每个单词与w2和w3中的其他单词进行比较。我怎样才能做到这一点?你知道吗
使用
stack
+pandas.Series.str.get_dummies
详细信息
请注意,当我们堆叠并获取虚拟对象时,临时结果如下所示:
前面的列嵌入到索引的第二级。所以我想在第一个层次上求和,看看这个词出现了多少次。你知道吗
这个总和看起来像:
注意,我们在第1行捕获
'son'
,在第3行捕获'dad'
和'son'
,依此类推。你知道吗如果它出现在多个列中(因此
gt(1)
),那么我想将它计为1
(因此any(1).astype(int)
)。你知道吗您可以通过修正输入错误来使用代码:用
=
替换==
。你知道吗这一行程序使用collections.Counter创建您需要的内容:
相关问题 更多 >
编程相关推荐