Pandas - 根据其他2列的值创建列

时间:2018-05-29 14:09:43

标签: python 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()

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

由于

2 个答案:

答案 0 :(得分:1)

试试这个,

df['total'] =df.groupby('subject')['val'].transform('sum')

df['total2'] =df.groupby('subject')['val'].transform(lambda x:x[x.notnull()].unique()) #this will remove NaN records and give you unique element in each group

输出:

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

答案 1 :(得分:1)

使用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