数据帧计数范围内的正值作为新列

时间:2018-01-17 19:40:53

标签: pandas dataframe

我有一个数据框:

@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'))) )中的正条目计数作为数据框的新列。

这样做的最佳方式是什么?

2 个答案:

答案 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)