我想计算某些值,只要数据框中的其他值匹配即可。这是我的df格式的示例,实际的df具有更多的行和列。我需要为其创建计数的唯一值是a
,b
,c
或d
。在任何列/行组合中都没有值的集合。
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
的值有数千个,因此我无法手动指定t1
,t2
,t3
等。
答案 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)