在pandas中合并和减去DataFrame列?

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)


Zer*_*ero 6

这是一种方法.

您可以创建newcol1sum(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)


EdC*_*ica 1

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)

  • 您必须发布完整数据才能让每个人都能重现此内容 (2认同)