Pandas 熊猫:根据行中的两个项目是否匹配,计算数据帧列的总数

Pandas 熊猫:根据行中的两个项目是否匹配,计算数据帧列的总数,pandas,dataframe,Pandas,Dataframe,我想计算某些值,只要数据帧中的其他值匹配。这是我的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

我想计算某些值,只要数据帧中的其他值匹配。这是我的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    ...
...     ...     ...     ...  ...  ...
我想的伪代码是(每行):

给出如下输出:

t1   2
t2   1
t3   3

输出应该是每列的总数。
t
的值以千为单位,因此我无法手动指定
t1
t2
t3
,等等。

假设您的数据帧位于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)

你需要提供更多的信息。例如,如果单元格只有a、b或还有一个集合。如果每个值只有一个,事情就会简单得多。另外,我猜输出是每列一个的总数,但您需要这样说。@576i已更新,希望有帮助!两个问题:1)如何对多个值使用
c.startswith('t')
?我应该指定,有些列以
n
y
开头。2) 我可以定义
d={'a':1,'b':2,'c':1,'d':2}
然后定义和吗?谢谢1.)df.colums获取列名。如果不能使用startswith,任何其他python想法都可以。可能在('n','y')中使用
c[0
这是一个普通的Python列表。例如,使用df.colums[2:]获取除前两个之外的任意值。2.)是的,您的示例没有指定a或b应算作第二个定界,如果您的真实示例是这样工作的,则可以。一般来说,你应该用一个更小的真实数据集来测试它,并查看值……我如何将它保存到一个文件中?当我尝试np.savetext时,它只给我数值,而不是匹配每个值的
cols
。例如尝试
result.to_csv('yourname.csv')
。但这将是一个新问题“如何将熊猫数据帧或系列保存到csv?”
result = sum1 + sum2
print(result)