我有一个数据框:
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
}
并希望将指定列(df = pd.DataFrame(np.random.randn(10, 3), columns=list('XYZ'))
df.insert(0, 'NAME', pd.Series(list('ABCDEFGHIJ')))
)中的正条目计数作为数据框的新列。
这样做的最佳方式是什么?
答案 0 :(得分:6)
这是一种方法:
df['COUNT'] = df.select_dtypes(include='float64').gt(0).sum(axis=1)
# NAME X Y Z COUNT
# 0 A -0.033066 -1.064625 -0.299286 0
# 1 B 0.902976 -1.703256 -0.011417 1
# 2 C -2.537364 -0.216643 1.051398 1
# 3 D 1.073677 -1.486599 -0.827829 1
# 4 E 2.157901 0.425371 -1.659263 2
# 5 F -1.589662 -0.382535 0.454324 1
# 6 G 0.487965 0.279265 0.820486 3
# 7 H 0.496104 -0.680161 0.763793 2
# 8 I -0.034518 -0.479307 -0.071954 0
# 9 J -0.170412 0.558505 -1.742784 1
select_dtypes
方法非常明确,但在这种情况下,它可用于过滤到某个dtype的列,而无需担心列名。
.gt
方法(documentation)测试Series值是否大于参数值(在本例中为0
),并返回布尔值。然后,我们可以计算True值的行总和,以获得符合我们标准的值的计数。
答案 1 :(得分:0)
我想我找到了一个解决方案,所以我在这里发帖以供将来参考。
np.random.seed(11)
df = pd.DataFrame(np.random.randn(10, 3), columns=list('XYZ'))
df.insert(0, 'NAME', pd.Series(list('ABCDEFGHIJ')))
cols = df.columns.difference(['NAME'])
df['COUNT'] = df[df[cols] > 0].count(axis=1)