熊猫:根据数据行中的两项是否匹配

时间:2018-09-17 21:06:00

标签: pandas dataframe

我想计算某些值,只要数据框中的其他值匹配即可。这是我的df格式的示例,实际的df具有更多的行和列。我需要为其创建计数的唯一值是abcd。在任何列/行组合中都没有值的集合。

df1 = 
item1   item2   item3   t1   t2   t3   ...
foo     foo     bar     a    a    b    ...
foo     bar     foo     c    a    c    ...
foo     bar     baz     a    b    c    ...
...     ...     ...     ...  ...  ...

我在想的伪代码是(对于每一行):

if df1[item1] = df1[item2]:
    add ONE to t if that column = 'a'
    add TWO to t if that column = 'b'
if df1[item1] = df1[item3]:
    add ONE to t if that column = 'c'
    add TWO to t if that column = 'd'

给出如下输出:

t1   2
t2   1
t3   3

每列的输出应为总计。 t的值有数千个,因此我无法手动指定t1t2t3等。

1 个答案:

答案 0 :(得分:1)

假设您的数据框位于 df 中, 首先让我们将列名称放入变量

cols = [c for c in df.columns if c.startswith('t')]

现在让我们进行第一个定界。

d = {'a': 1, 'b': 2}
sum1 = df.loc[df.item1 == df.item2][cols].applymap(lambda x: d.get(x, 0)).sum()

现在让我们进行第二个定界

d = {'c': 1, 'd': 2}
sum2 = df.loc[df.item1 == df.item3][cols].applymap(lambda x: d.get(x, 0)).sum()

添加结果

result = sum1 + sum2
print(result)