我试图比较同一行中的两个值,看看哪个更大。这两行是这样的日期:
PheneVisit PheneDate ER Date
phchp010v3 9/22/06
phchp010v3 9/22/06 5/1/20
phchp101v1 9/14/09
phchp101v1 9/14/09
我想把最高值放在一个名为";日期";使用下面的代码,但它不会捕获ER Date列的空白/NaN值,并且如果没有ER Date,它只会生成更多的NaN列。
这是我目前拥有的代码:
for index, row in data.iterrows():
if (pd.to_datetime(row['PheneDate']) > pd.to_datetime(row['ER Date'])) or (row['ER Date'] == 0):
print('1')
data["date order"] = data['PheneDate']
elif pd.to_datetime(row['ER Date']) > pd.to_datetime(row['PheneDate']) or [row['PheneDate'] == 0]:
print(2)
data["date order"] = data['ER Date']
它产生以下输出:
date order
5/1/20
所需输出为
9/22/06
5/1/20
9/14/09
9/14/09
**我只需要检查每个单元格中NaN的值,如果它是空的,那么应该使用非空日期。我还试过==='nan'和===0**
您可以使用pandas.to_datetime转换为日期时间类型并使用正常比较:
df['PheneDate'] = pd.to_datetime(df['PheneDate'])
df['ER'] = pd.to_datetime(df['ER'])
df['Date'] = df[['PheneDate', 'ER']].max(axis=1)
输出:
PheneVisit PheneDate ER Date
0 phchp010v3 2006-09-22 NaT 2006-09-22
1 phchp010v3 2006-09-22 2020-05-01 2020-05-01
2 phchp101v1 2009-09-14 NaT 2009-09-14
3 phchp101v1 2009-09-14 NaT 2009-09-14
如果您需要转换回具有特定区域格式的字符串,请使用以下方法:
>>> df['Date'].dt.strftime('%m/%d/%y')
0 09/22/06
1 05/01/20
2 09/14/09
3 09/14/09
最后,如果你真的想避免在月/日格式中使用前导零:
>>> df['Date'].dt.strftime('%-m/%-d/%y')
0 9/22/06
1 5/1/20
2 9/14/09
3 9/14/09
尝试numpy where:
df['new_col'] = np.where(df['ER Date'] > df['PheneDate'], df['ER Date'], df['PheneDate'])