我在这样的数据框中有一些数据:
COLUMNS Point,x,y,z,Description,Layer,Date
1,224939.203,1243008.651,1326.774,F,C-GRAD-FILL,09/22/18 07:24:34,
1,225994.242,1243021.426,1301.772,BS,C-GRAD-FILL,09/24/18 08:24:18,
451,225530.332,1243016.186,1316.173,GRD,C-TOE,10/02/18 11:49:13,
452,225522.429,1242996.017,1319.168,GRD,C-TOE KEY,10/02/18 11:49:46,
我想尝试检查一个字符串列表以查看其是否匹配,然后更改另一个列的值。
myList = ["BS", "C"]
if df['Description'].isin(myList)) == True:
df['Layer']="INLIST"
df['Date']="1/1/2018'
答案 0 :(得分:3)
与pd.DataFrame.loc
一起使用遮罩:
mask = df['Description'].isin(['BS', 'C'])
df.loc[mask, 'Layer'] = 'INLIST'
df.loc[mask, 'Date'] = '1/1/2018'
或者,使用pd.Series.mask
:
mask = df['Description'].isin(['BS', 'C'])
df['Layer'].mask(mask, 'INLIST', inplace=True)
df['Date'].mask(mask, '1/1/2018', inplace=True)
请注意,您可能应该将日期存储为datetime
对象,例如pd.Timestamp('2018-01-01')
,或通过pd.to_datetime
转换系列。通常不需要Python级的循环。
答案 1 :(得分:1)
从jpp借用mask
并使用列表分配值
df.loc[mask,['Layer','Date']]=['INLIST','1/1/2018']