如何根据上述行选择行Python-熊猫

时间:2020-08-18 20:18:54

标签: python pandas dataset rows

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。我想根据这些新结果创建另一个数据集

1 个答案:

答案 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
相关问题