我的数据框中有很多列,我想将每列中的值与特定列进行比较。例如,假设我想对于该数据框中的每一列,对列值和标签都等于 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/