我尝试在pandas中添加一个新列,如果在列表中找到“Level”列中的数据,则添加一些文本。然而,最后一个np.where是对第一个所做的更改的保留。我不知道如何让所有的更改都保留下来。我意识到第二个np.where只是对第一个所做的更改的保留,但不知道如何应用这两个.我尝试了一个for循环,一个if,并制作一个副本. newdf = ppl.copy(),但后来不知道如何将内容移动到副本.挖掘周围我想我可能需要ppl.loc?我肯定我错过了一些简单的东西.
import pandas as pd
import numpy as np
ppl = pd.read_excel('MyXLS.xlsx', sheet_name='People')
list8 = ['8-01','8-02','8-03','8-59']
list9 = ['9-01','9-04','9-36']
LVL8 = "These change Tuesday"
LVL9 = "These change Saturday"
ppl['Weekday'] = np.where(ppl['Level'].isin(list8), LVL8, 'NA')
print(ppl.head(10))
ppl['Weekday'] = np.where(ppl['Level'].isin(list9), LVL9, 'NA')
print(ppl.head(10))
字符串
输出:
Name Level Weekday
0 Mark 8-01 These change Tuesday
1 Gary 8-02 These change Tuesday
2 Lisa 8-03 These change Tuesday
3 John 8-59 These change Tuesday
4 Jessie 9-01 NA
5 Chris 9-04 NA
6 Sam 9-36 NA
Name Level Weekday
0 Mark 8-01 NA
1 Gary 8-02 NA
2 Lisa 8-03 NA
3 John 8-59 NA
4 Jessie 9-01 These change Saturday
5 Chris 9-04 These change Saturday
6 Sam 9-36 These change Saturday
型
2条答案
按热度按时间ahy6op9u1#
您可以嵌套
np.where
调用,以便第二个调用不会覆盖第一个调用所做的更改:字符串
但是只使用
.loc
来寻址特定行更简单:型
或者
np.select
:型
n8ghc7c12#
pandas.DataFrame.loc
如果你不想嵌套,最简单的方法是使用
pandas.DataFrame.loc
,这样你就可以通过标签(甚至是布尔数组)访问一组行和列。使用
pandas.DataFrame.loc
,第二次运行不会覆盖第一次运行中所做的更改,因为您可以方便地选择单独针对特定行:)解决方案(尽可能坚持自己的代码)
替换你的:
字符串
使用:
型
完整代码:
型
也有其他的解决方案,但不幸的是你必须嵌套。我坚持尽可能简单的代码。其他解决方案可以与
Numpy
和嵌套,例如使用numpy.where
,它返回根据条件从x或y中选择的元素