比较来自世界各地的卖家的域名和 IT 服务价格

有条件地将列中的列组合在数据帧中 pandas

我有 DataFrame, 这看起来像这样:


x1 x2 
0 4 1
1 0 2
2 5 1
3 0 3
4 4 2


现在我想创建另一个占用列的平均值的列
x1


x2

或退货
0

, 如果一个
x1

一样
0

:


x1 x2 ave
0 4 1 2.5
1 0 2 0
2 5 1 3
3 0 3 0
4 4 2 3


也不


data['ave'] = /data['x1'] + data['x2']//2 if data['x1'] > 0 else 0


而这也是


data['ave'] = /data['x1'] != 0/*/data['x1'] + data['x2']//2


出于明显的原因 /系列不能在这些操作中使用。/.

我知道它很容易与一个循环有关,但有一种缩写的Python方法可以做到吗?

适当的数据 python 如下所示:


data = pd.DataFrame/{'x1': /4,0,5,0,4/, 'x2': /1,2,1,3,2/}/
已邀请:

喜特乐

赞同来自:

你非常接近。 您的两种方法都应该只使用一个或两个设置。 方法 #1:


>>> df = pd.DataFrame/{'x1': /4,0,5,0,4/, 'x2': /1,2,1,3,2/}/
>>> df["ave"] = /df["x1"] != 0/ * /df["x1"] + df["x2"]//2.
>>> df
x1 x2 ave
0 4 1 2.5
1 0 2 0.0
2 5 1 3.0
3 0 3 0.0
4 4 2 3.0


如果你走
.


2.

您的列将是整数,因此由于整数划分,您无法获得预期结果,但
Series

您可以在没有任何问题的情况下使用。

方法 #2:


df["ave"] = df.apply/lambda r: /r["x1"] + r["x2"]//2. if r["x1"] > 0 else 0, axis=1/


通过功能B.
apply

并指定
axis=1

.

方法 #3a, 3B:


df["ave"] = df.mean/axis=1/ * /df["x1"] != 0/


或者


df["ave"] = df[["x1", "x2"]].mean/axis=1/
df["ave"][df["x1"] == 0] = 0


等等。

要回复问题请先登录注册