我尝试根据包含条件的列“ C”将不同的公式应用于新列“结果”。 如果C是'add',那么我想添加X和Y。当C是'mult'时,结果应该是X * Y。
df = pd.DataFrame({'X': [0, 1, 2, 3, 4],
'Y': [5, 6, 7, 8, 9],
'C': ['add', 'add', 'mult', 'mult', 'mult']})
df['result'] = df['X'] * df['Y']
df.loc[df.C =='add', 'result'] = df.loc[df['C'] =='add', 'X'] \
+ df.loc[df['C'] =='add', 'Y']
df
我得到的结果是:
C X Y result
0 add 0 5 5
1 add 1 6 5
2 mult 2 7 14
3 mult 3 8 24
4 mult 4 9 36
我需要的是第一行的结果为7
C X Y result
0 add 0 5 5
1 add 1 6 7
2 mult 2 7 14
3 mult 3 8 24
4 mult 4 9 36
答案 0 :(得分:2)
您的代码给出了正确的结果,但是如果您想要直接的方法
var myArray = [{
url: 'http://linkA'
}, {
url: 'http://linkB'
}, {
url: 'http://linkA'
}];
var urls = {};
var newArray = myArray.reduce(function(acc, obj, index) {
var url = obj.url;
if (urls[url]) {
return acc;
}
urls[url] = true;
acc.push({
strata: 'kit',
href: url
});
return acc;
}, [])
console.log(newArray);
输出:
df['result'] = df.apply(lambda x : x['X']+x['Y'] if x['C'] == 'add' else x['X']*x['Y'], axis=1 )
答案 1 :(得分:2)
您的解决方案效果很好,也可以在numpy.where
中使用此替代方法:
mask = df.C =='add'
df['result'] = np.where(mask, df['X'] + df['Y'], df['X'] * df['Y'])
print (df)
X Y C result
0 0 5 add 5
1 1 6 add 7
2 2 7 mult 14
3 3 8 mult 24
4 4 9 mult 36
如果可能的条件更多,请使用numpy.select
:
m1 = df.C =='add'
m2 = df.C =='mult'
m3 = df.C =='div'
v1 = df['X'] + df['Y']
v2 = df['X'] * df['Y']
v3 = df['X'] / df['Y']
df['result'] = np.select([m1, m2, m3], [v1, v2, v3])
print (df)
X Y C result
0 0 5 add 5.000000
1 1 6 add 7.000000
2 2 7 mult 14.000000
3 3 8 mult 24.000000
4 4 9 div 0.444444