我试图从数据帧中删除多个列,以便相同的类型出现在数据帧的相同位置。例如,在下面的数据帧中,df1
列和df2
列基本相同,顺序相同。唯一的区别是df2
列有后缀,数据类型为float。列位置很重要,因为df1的第一列是df2的第一列的二分法。出于某种目的,我需要将每列的df2值乘以df1的二分法值,然后按行求和。这应该会生成一列,其中包含我需要用于其他内容的总和
第一个数据帧:
df1 = {'a': {0: 0,
1: 0,
2: 0,
3: 0,
4: 1},
'b': {0: 1, 1: 0, 2: 1, 3: 0, 4: 0},
'c': {0: 0, 1: 0, 2: 0, 3: 0, 4: 1},
'd': {0: 0, 1: 1, 2: 1, 3: 0, 4: 0},
'e': {0: 0, 1: 1, 2: 0, 3: 1, 4: 0},
'f': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
'g': {0: 0,
1: 0,
2: 0,
3: 0,
4: 0},
'h': {0: 1,
1: 0,
2: 1,
3: 1,
4: 0},
'i: {0: 0,
1: 1,
2: 0,
3: 1,
4: 0},
'j': {0: 1, 1: 0, 2: 0, 3: 0, 4: 1}}
第二个数据帧
df2 = {'a_top3': {0: 0.084973365,
1: 0.057013709,
2: 0.072325557,
3: 0.098824218,
4: 0.252425998},
'b_top3': {0: 0.168823063,
1: 0.044829924,
2: 0.178180799,
3: 0.032501712,
4: 0.054869764},
'c_top3': {0: 0.040331405,
1: 0.042758454,
2: 0.077851109,
3: 0.111247674,
4: 0.160724968},
'd_top3': {0: 0.11076121,
1: 0.156901404,
2: 0.111759722,
3: 0.031440482,
4: 0.046660293},
'e_top3': {0: 0.059534989,
1: 0.090733215,
2: 0.087737411,
3: 0.141953781,
4: 0.011520214},
'f_top3': {0: 0.067696713,
1: 0.081674345,
2: 0.034215827,
3: 0.075849444,
4: 0.011245198},
'g_top3': {0: 0.041895844,
1: 0.048191357,
2: 0.102012217,
3: 0.100579783,
4: 0.034403443},
'h_top3': {0: 0.124932915,
1: 0.085968919,
2: 0.220041335,
3: 0.155145347,
4: 0.032171372},
'i_top3': {0: 0.103714436,
1: 0.349804282,
2: 0.077229746,
3: 0.150859997,
4: 0.081321001},
'j_top3': {0: 0.197336018,
1: 0.042124409,
2: 0.038646296,
3: 0.101597518,
4: 0.314657748}}
我需要一个列,使它是位于相同位置的每列的乘积之和。比如说,
prod_sum = df1[['a','b','c']].mul(df2[['a_top3', 'b_top3', 'c_top3']], axis=0).sum(axis=1)
应提供以下资料:
我尝试过的方法如上图所示,但我得到的只是NaN
。我可以使用循环来实现这一点,但我想知道是否有一种pythonic
方法来实现这一点
首先使用
merge()
方法:最后利用
apply()
方法和anonymous function
:现在,如果您打印
result
,您将获得:由于序列包含
float
类型的数据,因此无法用0
代替0.000000
让我们把你的数据的子集(DF1和DF2的前三列):
相乘(或任何类似操作)时,Pandas将尝试对齐索引和列。在这个场景中,我们需要找到一种方法将列名从
temp1
(a,b,c)对齐到temp2
(a_top3,…)。在这种情况下,最简单的解决方案是删除top3
的temp2
后缀,然后Pandas将成功地将列相乘并返回所需的内容:将同样的想法扩展到{}和{}:
相关问题 更多 >
编程相关推荐