如何从另一个数组中的某些元素创建数组?

时间:2018-04-28 15:43:41

标签: python arrays if-statement rows python-2.x

我有一个包含7列,52行的数组。我想创建一个仅包含第4列的数组,但仅基于第7列的1或0值。有人可以帮忙吗?

for row in dataArray:
    if (row[6] == 1):
        sumNSal += int(row[4])
    if (row[6] == 0):
        sumNSalR += int(row[4])
print sumNSal, sumNSalR

我的愿望是在第4列中实际添加一些数字,但只添加与最后一列中的0对应的数字。我的dataArray是这样的:最后一列由0和1组成。希望这可以解决混乱。

['244', '128', '385', '23521', '5230', '5334', '0']
['59', '155', '203', '9160', '2459', '493', '1']
['120', '281', '392', '21900', '6304', '6115', '0']
['120', '291', '419', '22354', '6590', '6346', '0']
['120', '238', '363', '17421', '5362', '6225', '0']
['65', '180', '234', '10531', '3622', '449', '1']
['120', '306', '372', '22147', '4406', '4998', '1']
['90', '214', '305', '14025', '4173', '966', '1']
['96', '155', '169', '8812', '1955', '1260', '0']
['120', '133', '188', '11729', '3224', '6442', '1']
['62', '148', '192', '8896', '2409', '1236', '0']
['120', '274', '426', '20987', '2066', '3360', '1']
['116', '154', '321', '17655', '5946', '4231', '0']
['59', '120', '164', '7085', '1925', '1280', '1']
['80', '261', '284', '13089', '4166', '1123', '1']
['120', '338', '375', '21453', '5257', '5206', '1']
['80', '77', '133', '7790', '1988', '4443', '1']
['100', '204', '318', '18309', '4156', '4585', '1']
['60', '97', '213', '8872', '1914', '1675', '1']
['110', '178', '280', '17881', '5173', '5686', '1']
['120', '232', '336', '17004', '4630', '907', '0']
['135', '316', '442', '23829', '7489', '3351', '0']
['59', '163', '191', '9424', '2051', '1756', '1']
['60', '96', '202', '12474', '3803', '2123', '0']
['25', '74', '83', '4078', '2008', '4531', '1']
['221', '514', '776', '36029', '1288', '2543', '1']
['64', '91', '214', '8782', '4729', '4446', '1']
['62', '146', '204', '8951', '2367', '1064', '0']
['108', '255', '366', '17446', '5933', '2987', '1']
['62', '144', '220', '6164', '2782', '411', '1']
['90', '151', '286', '2853', '4651', '4197', '0']
['146', '100', '375', '21334', '6857', '1198', '0']
['62', '174', '189', '8082', '2143', '1209', '1']
['30', '54', '88', '3948', '3025', '137', '1']
['79', '213', '278', '11649', '2905', '1279', '0']
['44', '127', '158', '7850', '1498', '1273', '1']
['120', '208', '423', '29035', '6236', '3524', '0']
['100', '255', '300', '17532', '3547', '2561', '1']
['49', '110', '177', '8197', '2810', '3874', '1']
['123', '208', '336', '22555', '6059', '6402', '1']
['82', '114', '136', '8459', '1995', '1911', '1']
['58', '166', '205', '10412', '2245', '1122', '1']
['110', '228', '323', '16661', '4029', '3893', '1']
['62', '183', '222', '12406', '2784', '2212', '1']
['86', '62', '200', '11312', '3720', '2959', '1']
['102', '326', '355', '14499', '3866', '3006', '1']
['135', '157', '471', '24274', '7485', '1344', '0']
['78', '154', '203', '9327', '3672', '1242', '1']
['83', '224', '390', '12362', '3995', '1484', '1']
['60', '48', '213', '10644', '2820', '1154', '0']
['54', '119', '144', '7556', '2088', '245', '1']
['120', '217', '327', '20182', '4432', '6274', '0']

2 个答案:

答案 0 :(得分:1)

如果您的2D列表是A,那么

# 0-based indexing
# assuming you want to take 4th column only when 7th column is `0`.
# assuming 7th column contains either '1' or '0'
X = [int(row[3]) for row in A if row[6] == '0'] 

X将是一个列表,对于2D列表中的每一行,如果第7列中的相应值为'0',则仅包含第4列值。

此语法称为列表理解,您可以阅读更多相关信息here

答案 1 :(得分:-1)

听起来你想要布尔索引。我假设我们正在谈论numpy。请注意,如果您希望最后一列中的值对应于零,则只需使用~取消布尔逻辑。

import numpy as np

# data array
A = np.random.random([52,7])

# Make a boolean from your seventh column
tf = np.array(A[:,6], dtype=bool)

# select values from the fourth column
a = A[~tf, 3]

# sum them
a.sum()

# This can be combined into one line if desired. Something like:
thesum = A[A[:,6] == 0, 3].sum()