我对此很陌生,所以这可能听起来很奇怪,但基本上,我有一个很大的数据帧,但为了简化目的,我们假设数据帧是这样的:
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
输出:
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'。
我目前拥有的是:
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
这里似乎什么也没发生,我也不完全确定为什么。
我还尝试了另一种方法:
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 值。
我也尝试过在不使用变量名的情况下执行此操作,但没有任何反应。
知道我缺少什么或者是否有办法做到这一点?
谢谢!
最佳答案
使用numpy where ,适用于条件。它类似于 Python 中的 if 语句,但速度明显更快。我很少使用 iterrows
,因为我发现它不如 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 中的第一行定义了您的条件,在本例中是查找“a”列是否为奇数。如果是,则执行下一行。如果是偶数,则执行最后一行。您可以将其视为 if-else 语句。
关于python - 如果满足条件,如何将两列添加或组合到数据框中的另一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60668751/