这是我的数据框的摘录。
data = [
['1245', np.nan, np.nan, 1.0, 1.0, ''],
['1246', np.nan, 1.0, 1.0, 1.0, ''],
['1247', 1.0, 1.0, 1.0, 1.0, ''],
['1248', 1.0, 1.0, np.nan, np.nan, ''],
['1249', np.nan, 1.0, np.nan, 1.0, '']
]
df = pd.DataFrame(data, columns = ['city_code', 'apr_12', 'may_12', 'jul_12', 'aug_12', 'first_index'])
我想用第一个“1.0”( float )所在列的索引(apr_12、may_12、jun_12 和 aug_12)填充“first_index”列。 例如,我想在第一行“2”的“first_index”列中看到,因为这是该行的第一个“1.0”的位置。这是假设的,也没有考虑“city_code”列。
仅供引用:最初,NaN 值是“0.0”( float ),但我认为使用 NaN 值和函数(例如 first_valid_index()
)会更容易(但我不能让它起作用...)。如果需要的话,我可以毫无问题地回零。
你们知道如何解决这个问题吗?非常感谢
请您参考如下方法:
鉴于您只有 NaN 和 1.0,您可以执行以下操作:
df['first_index'] = df[['apr_12', 'may_12', 'jul_12', 'aug_12']].fillna(0).to_numpy().argmax(1)
结果:
city_code apr_12 may_12 jul_12 aug_12 first_index
0 1245 NaN NaN 1.0 1.0 2
1 1246 NaN 1.0 1.0 1.0 1
2 1247 1.0 1.0 1.0 1.0 0
3 1248 1.0 1.0 NaN NaN 0
4 1249 NaN 1.0 NaN 1.0 1
(如果您在原始版本中使用零而不是 NaN,正如您所说,那么您当然可以跳过 fillna(0)
)
或更短(对于带有 NaN 的 df):
df['first_index'] = np.nanargmin(df[['apr_12', 'may_12', 'jul_12', 'aug_12']], 1)