可变列数之和

2024-05-17 13:37:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的熊猫数据帧-

Time    1 A    2 A     3 A     4 A     5 A    6 A    100 A
    5    10     4       6       6       4      6      4
    3    7      19      2       7       7      9      18
    6    3      6       3       3       8      10     56
    2    5      9       1       1       9      12     13

Time列给出了需要求和的A列的数量起来。那么输出像这样-

 Time   1 A    2 A     3 A     4 A     5 A    6 A    100 A    Total
    5    10     4       6       6       4      6      4         30
    3    7      19      2       7       7      9      18        28
    6    3      6       3       3       8      10     56        33
    2    5      9       1       1       9      12     13        14

换句话说,当Time列中的值是3时,它应该求1A, 2A and 3A的和 当Time列中的值为5时,它应与1A, 2A, 3A, 4A and 5A相加

注意:As之间还有其他列。所以我不能用简单的索引求和。你知道吗

非常感谢您的帮助。你知道吗


Tags: and数据数量timeastotal
2条回答

尝试:

df['total'] = df.apply(lambda x: sum([x[i+1] for i in range(x['Time'])]), axis=1)

Use numpy-idea是将np.arange创建的数组与Time列的长度进行比较,这些列通过广播到2d掩码转换为索引,通过^{}和最后一个sum获得匹配的值:

df1 = df.set_index('Time')
m = np.arange(len(df1.columns)) < df1.index.values[:, None]
df['new'] = np.where(m, df1.values, 0).sum(axis=1)
print (df)
   Time  1 A  2 A  3 A  4 A  5 A  6 A  100 A  new
0     5   10    4    6    6    4    6      4   30
1     3    7   19    2    7    7    9     18   28
2     6    3    6    3    3    8   10     56   33
3     2    5    9    1    1    9   12     13   14

详细信息:

print (df1)
      1 A  2 A  3 A  4 A  5 A  6 A  100 A
Time                                     
5      10    4    6    6    4    6      4
3       7   19    2    7    7    9     18
6       3    6    3    3    8   10     56
2       5    9    1    1    9   12     13

print (m) 
[[ True  True  True  True  True False False]
 [ True  True  True False False False False]
 [ True  True  True  True  True  True False]
 [ True  True False False False False False]]

print (np.where(m, df1.values, 0))
[[10  4  6  6  4  0  0]
 [ 7 19  2  0  0  0  0]
 [ 3  6  3  3  8 10  0]
 [ 5  9  0  0  0  0  0]]

相关问题 更多 >