Python 如果数据帧中的两列满足条件,如何将它们添加或组合到另一列中

Python 如果数据帧中的两列满足条件,如何将它们添加或组合到另一列中,python,pandas,dataframe,Python,Pandas,Dataframe,我是新手,所以这听起来可能很奇怪,但基本上,我有一个大的数据帧,但为了简化起见,让我们假设数据帧是这样的: import pandas as pd import numpy as np dfn = pd.DataFrame({'a':[1,2,3,4,5], 'b':[6,7,8,9,10], 'c':np.nan}) dfn for row in range(dfn.shape[0]): if dfn.lo

我是新手,所以这听起来可能很奇怪,但基本上,我有一个大的数据帧,但为了简化起见,让我们假设数据帧是这样的:

import pandas as pd
import numpy as np

dfn = pd.DataFrame({'a':[1,2,3,4,5],
                   'b':[6,7,8,9,10],
                   'c':np.nan})
dfn
for row in range(dfn.shape[0]):
    if dfn.loc[row]['a']%2!=0:
        dfn.loc[row]['c']=dfn.loc[row]['a']+dfn.loc[row]['b']
    else:
        dfn.loc[row]['c']=dfn.loc[row]['a']

dfn
输出:

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN
我想做的是根据条件在“c”列中填入值,即如果“a”中对应的行值为奇数,则将其添加到对应的行值“b”并输入到“c”,否则,只需使用“a”值表示“c”

我目前拥有的是:

import pandas as pd
import numpy as np

dfn = pd.DataFrame({'a':[1,2,3,4,5],
                   'b':[6,7,8,9,10],
                   'c':np.nan})
dfn
for row in range(dfn.shape[0]):
    if dfn.loc[row]['a']%2!=0:
        dfn.loc[row]['c']=dfn.loc[row]['a']+dfn.loc[row]['b']
    else:
        dfn.loc[row]['c']=dfn.loc[row]['a']

dfn
输出:

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN
这里似乎什么也没发生,我也不完全确定原因

我还尝试了一种不同的方法:

is_odd=dfn[dfn['a']%2!=0]
is_odd['c'] = is_odd['a'] + is+odd['b']

is_odd
奇怪的是,我得到了正确的输出:

    a   b   c
0   1   1   2
2   3   3   6
4   5   5   10

但当我再次调用dfn时,它会显示所有NaN值

我也尝试过不使用变量名,但什么也没发生

你知道我遗漏了什么或者有没有办法

谢谢

Use,它适用于条件句。它类似于python中的if语句,但速度要快得多。我很少使用iTrows,因为我觉得它没有numpy where那么有效

 dfn['c'] = np.where(dfn['a']%2 !=0, 
                     dfn.a + dfn.b,
                     dfn.a)


    a   b   c
0   1   6   7
1   2   7   2
2   3   8   11
3   4   9   4
4   5   10  15
基本上,np.where中的第一行定义了ur条件,在本例中,该条件用于确定“a”列是否为奇数。如果是,则执行下一行。如果是偶数,则执行最后一行。您可以将其视为if-else语句。

使用并获取
0
b
列的副本,其中
a
中有一个偶数值,然后我们将此序列添加到
a

dfn['c'] = dfn['b'].where(dfn['a'].mod(2).eq(1), 0).add(dfn['a'])
print(dfn)
   a   b   c
0  1   6   7
1  2   7   2
2  3   8  11
3  4   9   4
4  5  10  15
备选方案

dfn['c'] = dfn['a'].mask(dfn['a'].mod(2).eq(1), dfn['a'].add(dfn['b']))

dfn.loc[row]['c']=…
总是错误的
dfn.loc[row]
可能是副本或视图,因此您无法知道会发生什么。正确的方法是:


无论如何,这里你应该避免重复,使用
np。这里是我的解决方案,它接近问题作者的原始想法,希望它能有所帮助

def oddadd(x):
    if x['a']%2!=0:
        return x['a']+x['b']
    else:
        return x['a']
dfn["c"] = dfn.apply(oddadd,axis=1)


这很好地解决了问题;谢谢不知道np.where函数,所以很高兴了解:)