我正在尝试将数据从数据框中的单个列移动到列表中。
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()
请告知
答案 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()