【发布时间】:2021-12-29 16:33:28
【问题描述】:
我有以下数据框:
recordhigh recordlow
no_year
01-01 NaN NaN
01-02 NaN NaN
01-03 NaN NaN
01-04 NaN NaN
01-05 NaN -15.5
01-06 NaN NaN
01-07 NaN NaN
01-08 NaN NaN
01-09 NaN NaN
01-10 NaN NaN
01-11 NaN -20.0
01-12 NaN NaN
01-13 NaN NaN
01-14 NaN NaN
01-15 NaN NaN
01-16 NaN NaN
01-17 NaN NaN
01-18 NaN NaN
01-19 NaN NaN
01-20 NaN NaN
01-21 NaN NaN
01-22 NaN NaN
01-23 NaN NaN
01-24 NaN NaN
01-25 NaN NaN
01-26 NaN NaN
01-27 NaN NaN
01-28 NaN NaN
01-29 NaN NaN
01-30 NaN NaN
... ... ...
12-02 NaN NaN
12-03 NaN NaN
12-04 NaN NaN
12-05 NaN NaN
12-06 NaN NaN
12-07 10.0 NaN
12-08 10.0 NaN
12-09 12.2 NaN
12-10 15.0 NaN
12-11 15.6 NaN
12-12 20.0 NaN
12-13 19.4 NaN
12-14 18.3 NaN
12-15 16.1 NaN
12-16 15.0 NaN
12-17 NaN NaN
12-18 NaN NaN
12-19 NaN NaN
12-20 NaN NaN
12-21 NaN NaN
12-22 NaN NaN
12-23 18.3 NaN
12-24 17.2 NaN
12-25 11.1 NaN
12-26 11.7 NaN
12-27 NaN NaN
12-28 NaN NaN
12-29 NaN NaN
12-30 NaN NaN
12-31 NaN NaN
当它们不是 NaN 时,我想保持最高记录和最低记录。即,我想要一个包含所有记录高数字、所有记录低数字和 NaN 的列,以防两者都是 NaN。 我有以下代码可以应用函数:
def keep2015record(row):
if row['recordhigh']!=np.nan:
row['record']=row['recordhigh']
else:
row['record']=row['recordlow']
return row
我将它应用到我的数据框:
df2015record=df2015record.apply(keep2015record,axis='columns')
我只得到一个保持记录高的数据框:
recordhigh recordlow record
no_year
01-01 NaN NaN NaN
01-02 NaN NaN NaN
01-03 NaN NaN NaN
01-04 NaN NaN NaN
01-05 NaN -15.5 NaN
01-06 NaN NaN NaN
01-07 NaN NaN NaN
01-08 NaN NaN NaN
01-09 NaN NaN NaN
01-10 NaN NaN NaN
01-11 NaN -20.0 NaN
01-12 NaN NaN NaN
01-13 NaN NaN NaN
01-14 NaN NaN NaN
01-15 NaN NaN NaN
01-16 NaN NaN NaN
01-17 NaN NaN NaN
01-18 NaN NaN NaN
01-19 NaN NaN NaN
01-20 NaN NaN NaN
01-21 NaN NaN NaN
01-22 NaN NaN NaN
01-23 NaN NaN NaN
01-24 NaN NaN NaN
01-25 NaN NaN NaN
01-26 NaN NaN NaN
01-27 NaN NaN NaN
01-28 NaN NaN NaN
01-29 NaN NaN NaN
01-30 NaN NaN NaN
... ... ... ...
12-02 NaN NaN NaN
12-03 NaN NaN NaN
12-04 NaN NaN NaN
12-05 NaN NaN NaN
12-06 NaN NaN NaN
12-07 10.0 NaN 10.0
12-08 10.0 NaN 10.0
12-09 12.2 NaN 12.2
12-10 15.0 NaN 15.0
12-11 15.6 NaN 15.6
12-12 20.0 NaN 20.0
12-13 19.4 NaN 19.4
12-14 18.3 NaN 18.3
12-15 16.1 NaN 16.1
12-16 15.0 NaN 15.0
12-17 NaN NaN NaN
12-18 NaN NaN NaN
12-19 NaN NaN NaN
12-20 NaN NaN NaN
12-21 NaN NaN NaN
12-22 NaN NaN NaN
12-23 18.3 NaN 18.3
12-24 17.2 NaN 17.2
12-25 11.1 NaN 11.1
12-26 11.7 NaN 11.7
12-27 NaN NaN NaN
12-28 NaN NaN NaN
12-29 NaN NaN NaN
12-30 NaN NaN NaN
12-31 NaN NaN NaN
请问我做错了什么? 我也尝试过 if, elif, else 但我得到了相同的结果。 谢谢
【问题讨论】:
-
保持标题专注于特定问题——“初学者问题”和类似的标签不是必需的。如果可以的话,最好用更具体的问题描述来代替“无法正常工作”;我将尝试为此进行编辑。
-
你想要的结果是什么?您是否尝试有条件地将新列分配给现有列的非 NA?还是您要过滤数据框?
-
我想要一个包含所有记录高数字、所有记录低数字和 NaN 的列,以防两者都是 NaN
-
注意:我的 pandas 版本上没有 pandas.notna(obj)
标签: python pandas dataframe if-statement