0| name1 | name2 | tot |
+-------+-------+-----+
1| A | B | 3 |
2| C | A | 3 |
3| B | D | 4 |
4| A | E | 2 |
5| B | C | 5 |
+-------+-------+-----+
我要基于上一行选择行,其中至少有2次以上(分别在name1或name2中)在其他行中存在“字母”,且总和为> = 3。
在此示例中,我要选择:
A E 2
B C 5
因为在第4行中,我们在第1和第2行中出现了A(名称1),且tot> = 3; 和B C 5行,因为我们有B出现在第一行和第三行,且tot> = 3。
ps。我想根据这些新结果创建另一个数据集
答案 0 :(得分:0)
您可以使用collections.defaultdict
from collections import defaultdict
df = pd.DataFrame({'name1': list('ACBAB'), 'name2': list('BADEC'), 'tot': [3, 3, 4, 2, 5]})
seen = defaultdict(int) # every new key will be initialized with 0
keep = []
for row in df.itertuples():
keep.append(
(seen[row.name1] > 1) |
(seen[row.name2] > 1)
)
if row.tot >= 3:
# we can do this safely without risk of KeyError because `seen` is a default dict
seen[row.name1] += 1
seen[row.name2] += 1
out = df[keep]
输出
name1 name2 tot
3 A E 2
4 B C 5