关于python数组筛选的问题

yoyoalphax 2017-12-16 01:04:22
如何完成需求的第2步,谢谢~!



a = np.array([['项目A','薛之谦','费用1',200],
['项目A','薛之谦','费用2',100],
['项目B','薛之谦','费用3',300],
['项目C','张韶涵','费用4',600],
['项目C','张韶涵','费用5',300]])


b = np.array([['项目A',2000,3000],
['项目B',5000,2000],
['项目C',3000,1000]])

# 需求:
# 1、需要从a中取出薛之谦的所有项目:项目A和项目B
# 2、从b中根据"a_project",将b中包含有"a_project"的列的后两列累加,即:2000+3000+5000+2000

# 实现:
# 1、
a_project = np.unique(a[a[:,1] == '薛之谦',:][:,0]) #['项目A' '项目B']

# 2、

...全文
349 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyoalphax 2017-12-19
  • 打赏
  • 举报
回复
print(b[np.in1d(b[:, 0], a_project),1:].astype(np.float).sum())
引用 4 楼 oyljerry 的回复:

In [16]: numpy.in1d(b[:,0], a_project)
Out[16]: array([ True,  True, False], dtype=bool)

In [17]: b_project = numpy.in1d(b[:,0], a_project)

In [18]: c = b[b_project]

In [19]: c
Out[19]:
array([['\xe9\xa1\xb9\xe7\x9b\xaeA', '2000', '3000'],
       ['\xe9\xa1\xb9\xe7\x9b\xaeB', '5000', '2000']],
      dtype='|S7')

In [24]: c[:, 1:3].astype(numpy.int)
Out[24]:
array([[2000, 3000],
       [5000, 2000]])

In [25]: c[:, 1:3].astype(numpy.int).sum(axis=1)
Out[25]: array([5000, 7000])

yoyoalphax 2017-12-18
  • 打赏
  • 举报
回复
发帖位置没有对么?
yoyoalphax 2017-12-18
  • 打赏
  • 举报
回复
谢谢!差不多的也搞了一个,一样的思路: np.where(np.in1d(b[:,0],a_project),np.sum(b[:,1:].astype('float'),axis=1),0).sum()
引用 4 楼 oyljerry 的回复:

In [16]: numpy.in1d(b[:,0], a_project)
Out[16]: array([ True,  True, False], dtype=bool)

In [17]: b_project = numpy.in1d(b[:,0], a_project)

In [18]: c = b[b_project]

In [19]: c
Out[19]:
array([['\xe9\xa1\xb9\xe7\x9b\xaeA', '2000', '3000'],
       ['\xe9\xa1\xb9\xe7\x9b\xaeB', '5000', '2000']],
      dtype='|S7')

In [24]: c[:, 1:3].astype(numpy.int)
Out[24]:
array([[2000, 3000],
       [5000, 2000]])

In [25]: c[:, 1:3].astype(numpy.int).sum(axis=1)
Out[25]: array([5000, 7000])

oyljerry 2017-12-18
  • 打赏
  • 举报
回复

In [16]: numpy.in1d(b[:,0], a_project)
Out[16]: array([ True,  True, False], dtype=bool)

In [17]: b_project = numpy.in1d(b[:,0], a_project)

In [18]: c = b[b_project]

In [19]: c
Out[19]:
array([['\xe9\xa1\xb9\xe7\x9b\xaeA', '2000', '3000'],
       ['\xe9\xa1\xb9\xe7\x9b\xaeB', '5000', '2000']],
      dtype='|S7')

In [24]: c[:, 1:3].astype(numpy.int)
Out[24]:
array([[2000, 3000],
       [5000, 2000]])

In [25]: c[:, 1:3].astype(numpy.int).sum(axis=1)
Out[25]: array([5000, 7000])

yoyoalphax 2017-12-18
  • 打赏
  • 举报
回复
谢谢!pandas可以实现的,想看看numpy直接写怎么实现,哈哈。
引用 2 楼 extend 的回复:
给你一个用pandas的例子,你参考下:

>>> df=pd.DataFrame({"项目":("项目A","项目B","项目C"),
		 "金额1":(2000,5000,3000),
		 "金额2":(3000,2000,1000)})
>>> df
    金额1   金额2   项目
0  2000  3000  项目A
1  5000  2000  项目B
2  3000  1000  项目C

>>> df["金额1"][(df.项目=="项目A")|(df.项目=="项目B")].sum()
7000
>>> df["金额2"][(df.项目=="项目A")|(df.项目=="项目B")].sum()
5000
extend 2017-12-18
  • 打赏
  • 举报
回复
给你一个用pandas的例子,你参考下:

>>> df=pd.DataFrame({"项目":("项目A","项目B","项目C"),
		 "金额1":(2000,5000,3000),
		 "金额2":(3000,2000,1000)})
>>> df
    金额1   金额2   项目
0  2000  3000  项目A
1  5000  2000  项目B
2  3000  1000  项目C

>>> df["金额1"][(df.项目=="项目A")|(df.项目=="项目B")].sum()
7000
>>> df["金额2"][(df.项目=="项目A")|(df.项目=="项目B")].sum()
5000

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧