关联虚拟变量等于 1 的列列表的总和
Sum of a list of columns for which the associated dummy equals 1
我有一长串带有数值的列。每列都有一个关联的虚拟变量。我想创建一个新列,其中包含列表中所有列的按行总和,因为关联的虚拟变量等于 1。
由于数据的长度,单独为每一列指定条件是不可行的。
示例数据:
df = pd.DataFrame(np.random.randint(0,100,size=(4, 3)), columns=('A', 'B', 'C'))
dummy_array = np.array([[1, 0, 0],[1, 1, 1], [0, 0, 0], [0, 1, 1]])
df[['A_dummy', 'B_dummy', 'C_dummy']] = pd.DataFrame(index=df.index,data = dummy_array)
print(df)
A B C A_dummy B_dummy C_dummy
0 33 56 75 1 0 0
1 12 99 49 1 1 1
2 7 92 84 0 0 0
3 95 19 79 0 1 1
所需的解决方案:
A B C A_dummy B_dummy C_dummy ABC_sum
0 33 56 75 1 0 0 33
1 12 99 49 1 1 1 160
2 7 92 84 0 0 0 0 (or NaN)
3 95 19 79 0 1 1 98
我想不出一个解决方案可以通过列表 = ['A'、'B'、'C'] 并执行此操作。
感谢您的输入。
@mozway 提供的(非常简单的)解决方案:
abclist = ['A', 'B', 'C'] # I used a regex-filter to create this list
abc_dummylist = [item + '_dummy' for item in abclist]
df['ABC_sum'] = (df[abclist ]*df[abc_dummylist ].values).sum(axis=1)
print(df)
A B C A_dummy B_dummy C_dummy ABC_sum
0 70 24 10 1 0 0 70
1 7 15 3 1 1 1 25
2 25 74 23 0 0 0 0
3 22 72 77 0 1 1 149
你可以这样做:
df['ABC_sum'] = (df[['A', 'B', 'C']]*df[['A_dummy', 'B_dummy', 'C_dummy']].values).sum(axis=1)
注意。如果你有很多列,你可以 select 它们 filter
示例:
A B C A_dummy B_dummy C_dummy ABC_sum
0 92 12 74 1 0 0 92
1 40 59 36 1 1 1 135
2 88 70 40 0 0 0 0
3 78 49 53 0 1 1 102
我有一长串带有数值的列。每列都有一个关联的虚拟变量。我想创建一个新列,其中包含列表中所有列的按行总和,因为关联的虚拟变量等于 1。
由于数据的长度,单独为每一列指定条件是不可行的。
示例数据:
df = pd.DataFrame(np.random.randint(0,100,size=(4, 3)), columns=('A', 'B', 'C'))
dummy_array = np.array([[1, 0, 0],[1, 1, 1], [0, 0, 0], [0, 1, 1]])
df[['A_dummy', 'B_dummy', 'C_dummy']] = pd.DataFrame(index=df.index,data = dummy_array)
print(df)
A B C A_dummy B_dummy C_dummy
0 33 56 75 1 0 0
1 12 99 49 1 1 1
2 7 92 84 0 0 0
3 95 19 79 0 1 1
所需的解决方案:
A B C A_dummy B_dummy C_dummy ABC_sum
0 33 56 75 1 0 0 33
1 12 99 49 1 1 1 160
2 7 92 84 0 0 0 0 (or NaN)
3 95 19 79 0 1 1 98
我想不出一个解决方案可以通过列表 = ['A'、'B'、'C'] 并执行此操作。 感谢您的输入。
@mozway 提供的(非常简单的)解决方案:
abclist = ['A', 'B', 'C'] # I used a regex-filter to create this list
abc_dummylist = [item + '_dummy' for item in abclist]
df['ABC_sum'] = (df[abclist ]*df[abc_dummylist ].values).sum(axis=1)
print(df)
A B C A_dummy B_dummy C_dummy ABC_sum
0 70 24 10 1 0 0 70
1 7 15 3 1 1 1 25
2 25 74 23 0 0 0 0
3 22 72 77 0 1 1 149
你可以这样做:
df['ABC_sum'] = (df[['A', 'B', 'C']]*df[['A_dummy', 'B_dummy', 'C_dummy']].values).sum(axis=1)
注意。如果你有很多列,你可以 select 它们 filter
示例:
A B C A_dummy B_dummy C_dummy ABC_sum
0 92 12 74 1 0 0 92
1 40 59 36 1 1 1 135
2 88 70 40 0 0 0 0
3 78 49 53 0 1 1 102