如何对pandas数据框进行按列缩减?

13

我有一个如下所示的数据框:

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO
    from functools import reduce

import pandas as pd
from numpy import uint8, logical_or

df = pd.read_table(StringIO("""a    b    c
1   0   0
1   1   1
0   1   1
1   1   0"""), sep="\s+", dtype=uint8, header=0)

我该如何对数据框按列进行缩减?

目前我只是将所有向量放在列表中并进行缩减,但这可能不是最优雅的方法:

gene_vectors = [df[v] for v in df]

print(reduce(logical_or, gene_vectors))

有其他的选择吗?


1
你的意思是类似于 df.apply(lambda x: reduce(np.logical_or, x)) 这样的吗? - EdChum
是的,那可能就是了。不知道我的方法还是那个方法更快.... - The Unfun Cat
你所做的就是为每一列创建一个df,这似乎是不必要的。从语义上讲,它们应该执行相同的操作。在df上调用apply函数会依次对每一列调用该函数(因为axis=0是默认参数值)。 - EdChum
@dermen axis=1 在这里表示按行操作。 - EdChum
是的,你将行值与行值进行比较,但是你是在所有列上进行减少操作,对吗? - dermen
显示剩余3条评论
1个回答

12
我相信这是实现这一目标的“熊猫式”方法。
df.apply(lambda x: reduce(logical_or,x), axis=1)

虽然可能有其他路线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接