use*_*200 10 python numpy dataframe pandas
我有一个pandas DataFrame,类似于:
col1 col2 col3 col5
NaN 1 2 8
2 NaN 4 8
4 NaN 4 8
Run Code Online (Sandbox Code Playgroud)
我想做两件事:
1)合并第1列和第2列:
newcol1 col3 col5
1 2 8
2 4 8
4 4 8
Run Code Online (Sandbox Code Playgroud)
我尝试过使用.concat,但这只是连接行.似乎我不能使用+具有NaN值的标准运算符.
2)从新的第1列和第3列中减去第5列,所以我最终得到:
newcol1 col3
-7 -6
-6 -4
-4 -4
Run Code Online (Sandbox Code Playgroud)
试过这样做:
dataframe[['newcol1', 'col2']] - dataframe['col5']
Run Code Online (Sandbox Code Playgroud)
和
dataframe[['newcol1', 'col2']].subtract(dataframe['col5'])
Run Code Online (Sandbox Code Playgroud)
但都不起作用.
Ale*_*ley 12
要获取新列,您可以使用fillna(或combine_first):
df['newcol1'] = df.col1.fillna(df.col2)
Run Code Online (Sandbox Code Playgroud)
然后对于减法,使用sub和指定,axis=0因为我们要在匹配标签时考虑行索引(而不是默认的列索引):
>>> df[['newcol1', 'col3']].sub(df['col5'], axis=0)
newcol1 col3
0 -7 -6
1 -6 -4
2 -4 -4
Run Code Online (Sandbox Code Playgroud)
这是一种方法.
您可以创建newcol1由sum(axis=1)
In [256]: df['newcol1'] = df[['col1', 'col2']].sum(axis=1)
In [257]: df
Out[257]:
col1 col2 col3 col5 newcol1
0 NaN 1 2 8 1
1 2 NaN 4 8 2
2 4 NaN 4 8 4
Run Code Online (Sandbox Code Playgroud)
然后使用df.sub()上axis=0
In [258]: df[['newcol1', 'col3']].sub(df['col5'], axis=0)
Out[258]:
newcol1 col3
0 -7 -6
1 -6 -4
2 -4 -4
Run Code Online (Sandbox Code Playgroud)
In [58]:
df['newcol'] = df[['col1','col2']].sum(axis=1) - df['col5']
df['col3'] = df['col3'] - df['col5']
df
Out[58]:
col1 col2 col3 col5 newcol
0 NaN 1 -6 8 -7
1 2 NaN -4 8 -6
2 4 NaN -4 8 -4
Run Code Online (Sandbox Code Playgroud)
然后你可以删除 col1 和 col2:
In [59]:
df = df.drop(['col1','col2'],axis=1)
df
Out[59]:
col3 col5 newcol
0 -6 8 -7
1 -4 8 -6
2 -4 8 -4
Run Code Online (Sandbox Code Playgroud)