首页 > 解决方案 > Pandas - 根据其他 2 列的值创建一列

问题描述

我正在尝试解决 Pandas 上的一些问题,但我不知道从哪里开始。

我有一个包含多列的数据框,但是这个问题感兴趣的看起来像这样:

df = pd.DataFrame(data = {'subject': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'val': [np.nan, 2, np.nan, np.nan, np.nan, 7, np.nan, np.nan, 10]})

    subject    val
0        1     NaN
1        1     2.0
2        1     NaN
3        2     NaN
4        2     NaN
5        2     7.0
6        3     NaN
7        3     NaN
8        3    10.0

我想创建第三列,对于每个主题,列 val 对应主题的值:

   subject    val  total
0        1     NaN   2
1        1     2.0   2
2        1     NaN   2
3        2     NaN   7
4        2     NaN   7
5        2     7.0   7
6        3     NaN  10
7        3     NaN  10
8        3    10.0  10

我知道我能做到

df[['subject', 'val']].dropna()

获取第三列的值,但这会丢失数据框中的所有其他列(每行具有不同的值)。

谢谢

标签: pythonpandas

解决方案


通过使用ffillbfill

df['New']=df.groupby('subject').val.apply(lambda x : x.ffill().bfill())
df
Out[257]: 
   subject   val   New
0        1   NaN   2.0
1        1   2.0   2.0
2        1   NaN   2.0
3        2   NaN   7.0
4        2   NaN   7.0
5        2   7.0   7.0
6        3   NaN  10.0
7        3   NaN  10.0
8        3  10.0  10.0

推荐阅读