根据条件将数据帧的值移动到列表中

时间:2016-11-28 08:31:52

标签: python list pandas numpy conditional-statements

我正在尝试将数据从数据框中的单个列移动到列表中。

Account Name    Renewal % Change
Client 1        0%
Client 2        0%
Client 3        2%
Client 4        0%
Client 5        1%
Client 6        1%

所以如果客户端有0%它应该被添加到列表Cost0并且它有1%它应该被添加到Cost1。

我尝试使用pd.series.tolist(),但它一直给我一个错误。

if brl['Renewal % Change'] == '0%':
    a = pd.Series(brl['Account Name'])
    a.tolist()
  

ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()

请告知

2 个答案:

答案 0 :(得分:1)

您可以使用位loc进行更改mask = brl['Renewal % Change'] == '0%' print (mask) 0 True 1 True 2 False 3 True 4 False 5 False Name: Renewal % Change, dtype: bool print (brl.loc[mask, 'Account Name'].tolist()) ['Client 1', 'Client 2', 'Client 4'] 选择列:

Cost0 = brl.loc[brl['Renewal % Change'] == '0%', 'Account Name'].tolist()
print (Cost0)
['Client 1', 'Client 2', 'Client 4']

Cost1 = brl.loc[brl['Renewal % Change'] == '1%', 'Account Name'].tolist()
print (Cost1)
['Client 5', 'Client 6']

所有在一起:

Series

你得到错误,因为比较return boolean print (brl['Renewal % Change'] == '0%') 0 True 1 True 2 False 3 True 4 False 5 False Name: Renewal % Change, dtype: bool - 数组而不是标量值,请参阅boolean indexing

loc

比较解决方案 - 与In [137]: %timeit brl.loc[brl['Renewal % Change'] == '0%', 'Account Name'].tolist() 1000 loops, best of 3: 536 µs per loop In [138]: %timeit brl[brl['Renewal % Change']=='0%']['Account Name'].tolist() 1000 loops, best of 3: 657 µs per loop 相比更快:

{{1}}

答案 1 :(得分:1)

试试这个

Cost0 = brl[blr['Renewal % Change']=='0%']['Account Name'].tolist()
Cost1 = brl[blr['Renewal % Change']=='1%']['Account Name'].tolist()