循环DF中的列,并根据R或Python中每个附加列的条件计算总和
这里我有4*3个数据帧(A、B、C列)。我想根据两行都为1的条件计算列组合中的总和。换句话说,在输出中,我希望有一个2b1c1的1*3数据帧。首先我看A列,它有两行和一行,总和是2,然后我看A和B的组合,只有一行和两行都是1,所以我得到1。最后,我得到A,B,C的组合,它有一行和所有的,所以我也得到1。请您提供在R或Python中执行此操作的最佳方法。假设数据帧中只有1和0。您可以使用循环DF中的列,并根据R或Python中每个附加列的条件计算总和,python,r,loops,combinations,apply,Python,R,Loops,Combinations,Apply,这里我有4*3个数据帧(A、B、C列)。我想根据两行都为1的条件计算列组合中的总和。换句话说,在输出中,我希望有一个2b1c1的1*3数据帧。首先我看A列,它有两行和一行,总和是2,然后我看A和B的组合,只有一行和两行都是1,所以我得到1。最后,我得到A,B,C的组合,它有一行和所有的,所以我也得到1。请您提供在R或Python中执行此操作的最佳方法。假设数据帧中只有1和0。您可以使用sapply在R中执行此操作 A B C 1 0 0 0 0 1 0 1 0 1 1 1 在这里,我们从dat
sapply
在R中执行此操作
A B C
1 0 0
0 0 1
0 1 0
1 1 1
在这里,我们从dataframe中递增地选择一列,并计算其中都有1的行数 假设数据帧中只有1和0。您可以使用
sapply
在R中执行此操作
A B C
1 0 0
0 0 1
0 1 0
1 1 1
在这里,我们从dataframe中递增地选择一列,并计算其中都有1的行数 如果你想得到一系列的结果,你可以这样做。
dict
或OrderedDict
也很容易
sapply(seq_along(df), function(x) sum(rowSums(df[1:x]) == x))
#[1] 2 1 1
结果
如果你想得到一系列的结果,你可以这样做。
dict
或OrderedDict
也很容易
sapply(seq_along(df), function(x) sum(rowSums(df[1:x]) == x))
#[1] 2 1 1
结果
使用
cumsum
A 2.0
B 1.0
C 1.0
收益率:
d = {col_name: sum(col == i) for i, (col_name, col) in enumerate(df.cumsum(axis=1).iteritems(), 1)}
如果您想要一个系列:
{'A': 2, 'B': 1, 'C': 1}
仅当您要查找的值为
1
(或True
)时,此选项才起作用,使用cumsum
A 2.0
B 1.0
C 1.0
收益率:
d = {col_name: sum(col == i) for i, (col_name, col) in enumerate(df.cumsum(axis=1).iteritems(), 1)}
如果您想要一个系列:
{'A': 2, 'B': 1, 'C': 1}
仅当您要查找的值为
1
(或True
)时,此方法才有效。下面是另一种方法,使用Reduce()
函数从左到右连续乘以每行中的值。以下代码要求data.frame中只有1和0
pd.Series(d, index=df.columns)
结果是一个data.table。如果需要向量,请尝试
V1 V2 V3
1: 2 1 1
资料
DF这里是另一种方法,使用Reduce()
函数从左到右连续乘以每行中的值。以下代码要求data.frame中只有1和0
pd.Series(d, index=df.columns)
结果是一个data.table。如果需要向量,请尝试
V1 V2 V3
1: 2 1 1
资料
DF那么你在用r
或python
寻求什么帮助呢?到目前为止你试过什么吗?对我来说,这两种语言中的任何一种都能奏效。我现在试图在R中找到快速的解决方案,所以我首先在df中的所有列上循环,列出附加的列a、AB、ABC,然后检查行应该包含所有要计数的列的条件,如果满足条件,则计算总和,并将最终df返回为output@Dima点击左侧投票按钮旁边的绿色复选标记,您可以接受下面的任何一个答案。那么您在寻求关于r
或python
的帮助吗?到目前为止你试过什么吗?对我来说,这两种语言中的任何一种都能奏效。我现在试图在R中找到快速的解决方案,所以我首先在df中的所有列上循环,列出附加的列a、AB、ABC,然后检查行应该包含所有要计数的列的条件,如果满足条件,则计算总和,并将最终df返回为output@Dima你可以点击左边投票按钮旁边的绿色复选标记来接受下面的任何一个答案。我知道,但根据我的说法,这是一个不同的答案,使用了不同的技术。这个函数对所有值求和,并检查和是否对应于列号(+1),因此如果原始数据帧中的值不是1(或True
),这个函数将不起作用。另一个计算每列中的True
-ty值,因此您也可以将其替换为其他检查,而不仅仅是bool()
,我知道,但根据我的说法,这是一个使用不同技术的不同答案。这个函数对所有值求和,并检查和是否对应于列号(+1),因此如果原始数据帧中的值不是1(或True
),这个函数将不起作用。另一个计算每列中的True
-ty值,因此您也可以用其他检查代替它,而不仅仅是bool()