首页 > 解决方案 > 根据给定条件过滤数据框并添加新列

问题描述

我有一个这样的数据框

ID      col1           col2 
1    Abc street       2017-07-27 
1    None             2017-08-17 
1    Def street       2018-07-15 
1    None             2018-08-13 
2    fbg street       2018-01-07 
2    None             2018-08-12 
2    trf street       2019-01-15 

我想过滤掉 col1 中的所有“无”,并将相应的 col2 值添加到新列 col3 中。我的输出看起来像这样

ID      col1           col2              col3 
1    Abc street       2017-07-27     2017-08-17          
1    Def street       2018-07-15     2018-08-13             
2    fbg street       2018-01-07     2018-08-12             
2    trf street       2019-01-15     

任何人都可以帮助我实现这一目标。

标签: pythonpython-3.xpandasnumpypandas-groupby

解决方案


今日版的 Over Engineered with Numpy

虽然公认的很少明显 Numpy

i, rows = pd.factorize([*zip(df.ID, df.col1.replace('None'))])
k, cols = pd.factorize(df.groupby(i).cumcount())

dleft = pd.DataFrame(dict(zip(['ID', 'col1'], zip(*rows))))
drigt = pd.DataFrame(index=dleft.index, columns=np.arange(len(cols)) + 2).add_prefix('col')
drigt.values[i, k] = df.col2.values

dleft.join(drigt)

   ID        col1        col2        col3
0   1  Abc street  2017-07-27  2017-08-17
1   1  Def street  2018-07-15  2018-08-13
2   2  fbg street  2018-01-07  2018-08-12
3   2  trf street  2019-01-15         NaN

推荐阅读