python - 通过行比较迭代 pandas 列

标签 python numpy pandas

我的数据框中有很多列,我想将每列中的值与特定列进行比较。例如,假设我想对于该数据框中的每一列,对列值和标签都等于 1 的情况求和:

 col1 | col2 | col3 | ... | label
  1   |  0   |  0   | ... |   1
  0   |  0   |  1   | ... |   0

当我尝试使用 df.apply(lambda x: x.label==1, axis=1) 之类的方法执行此操作时,我可以使用 x 选择标签列。标签,但如何选择列本身?

我可以使用 for 循环来迭代列名称来完成此操作,但我想知道是否有一种更像 pandas 的方法可以在不使用循环的情况下完成此操作。

results = []
for col in df.columns:
    val = len(df[(df[col]==1) & (df.label==1)])
    results.append(val)

最佳答案

只需按标签过滤并对剩下的内容进行求和即可:

df.loc[df['label'] == 1].sum()

示例:

df = pd.DataFrame(np.random.randint(2, size=(10, 4)),
                  columns=['col1', 'col2', 'col3', 'label'])
print(df)

   col1  col2  col3  label
0     0     0     1      1
1     1     1     0      0
2     1     1     0      0
3     0     0     0      0
4     0     0     1      0
5     0     0     0      1
6     1     0     1      1
7     0     1     1      0
8     0     0     0      0
9     0     0     0      0

results = []
for col in df.columns:
    val = len(df[(df[col]==1) & (df.label==1)])
    results.append(val)
results

[1, 0, 2, 3]

df.loc[df['label'] == 1].sum().tolist()

[1, 0, 2, 3]

编辑:

如果不是所有内容都为 0 或 1,但您仍想对列值和标签都等于 1 的情况进行求和,则在按标签过滤后,将所有非 0 或 1 的内容都设为 0,然后将其中的值求和左:

df = pd.DataFrame(np.random.randint(3, size=(10, 4)),
                  columns=['col1', 'col2', 'col3', 'label'])
print(df)

   col1  col2  col3  label
0     0     0     2      1
1     1     0     0      2
2     2     1     0      2
3     1     1     1      0
4     0     0     2      1
5     2     2     1      2
6     0     2     1      1
7     1     1     0      0
8     1     0     0      2
9     0     2     1      2

results = []
for col in df.columns:
    val = len(df[(df[col]==1) & (df.label==1)])
    results.append(val)
results

[0, 0, 1, 3]

df.loc[df['label'] == 1][df == 1].sum().fillna(0).tolist()

[0.0, 0.0, 1.0, 3.0]

关于python - 通过行比较迭代 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35125683/

相关文章:

python - Mac OSX 10.5.8 上适用于 Django 的 mod_wsgi

python - 我无法使用 pygame.get_pressed() 读取键盘的状态

python - 如何使用 pandas 将 excel 文件数据转换为 numpy 数组?

python - 按行降序排序 Nd Numpy 数组

python - 计算 pandas 列中值的频率,其中另一列中的值相似

python - 无法在 Pandas 中传递基本功能

python - 如何使 Selenium 不等待整个页面加载,其脚本速度很慢?

python - Tensorflow SxN矩阵乘以SxD矩阵输出SxNxD数组

python - 如何将 numpy 元组数组乘以标量数组

python - 将包含特定字符串的行值移动到 Python 中的新列