Pandas:查找出现在特定列中的元素的第一次出现

2024-04-23

假设我有以下数据框:

df_raw = pd.DataFrame({"id": [102, 102, 103, 103, 103], "val1": [9,2,4,7,6], "val2": [np.nan, 3, np.nan, 4, 5], "val3": [4, np.nan, np.nan, 5, 1], "date": [pd.Timestamp(2002, 1, 1), pd.Timestamp(2002, 3, 3), pd.Timestamp(2003, 4, 4), pd.Timestamp(2003, 8, 9), pd.Timestamp(2005, 2, 3)]})

我想访问每个第一次出现的行id是。所以这些行将是:

df_first = pd.DataFrame({"id": [102, 103], "val1": [9, 4], "val2": [np.nan, np.nan], "val3": [4, np.nan], "date": [pd.Timestamp(2002, 1, 1), pd.Timestamp(2003, 4, 4)]})

基本上,最后我想要实现的是填满NaN第一次出现的 sid。所以最终的数据框可能是:

df_processed = pd.DataFrame({"id": [102, 102, 103, 103, 103], "val1": [9,2,4,7,6], "val2": [-1, 3, -1, 4, 5], "val3": [4, np.nan, -1, 5, 1], "date": [pd.Timestamp(2002, 1, 1), pd.Timestamp(2002, 3, 3), pd.Timestamp(2003, 4, 4), pd.Timestamp(2003, 8, 9), pd.Timestamp(2005, 2, 3)]})

需要注意的是,行已按 id 和日期分组并按升序排序。因此它们的显示与提供的示例中完全相同。


IIUC 使用drop_duplicates then concat

df1=df_raw.drop_duplicates('id').fillna(-1)
target=pd.concat([df1,df_raw.loc[~df_raw.index.isin(df1.index)]]).sort_index()
target
        date   id  val1  val2  val3
0 2002-01-01  102     9  -1.0   4.0
1 2002-03-03  102     2   3.0   NaN
2 2003-04-04  103     4  -1.0  -1.0
3 2003-08-09  103     7   4.0   5.0
4 2005-02-03  103     6   5.0   1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:查找出现在特定列中的元素的第一次出现 的相关文章

随机推荐