首页 > 解决方案 > Python - 如何根据各种列对行进行条件计数?

问题描述

我想创建一个 Python 数据框,用于计算每个样本中每个日期类型C P出现的次数。C 和 P 是 F 的子集,这意味着只要Type等于F,我就可以计算具有相同Sample值和相同Date值的行数。
我无法对条件进行硬编码,因为实际数据集比样本大得多。这意味着我需要将我的条件基于数据集中Type等于F的值。
这是我的数据集 df_Data 的一个示例(实际数据要大得多):

样品 | 类型 | 日期 | 罢工
A | F | 2020 年 6 月 1 日 |
一个 | C | 2020 年 6 月 1 日 | 5个
| 磷 | 2020 年 6 月 1 日 | 2.5
A | F | 2020 年 12 月 1 日 |
一个 | 磷 | 2020 年 12 月 1 日 | 3个
| 磷 | 2020 年 12 月 1 日 | 3.5
A | 磷 | 2020 年 12 月 1 日 | 4
乙 | F | 2020 年 6 月 1 日 |
乙| C | 2020 年 6 月 1 日 | 2.5
B | C | 2020 年 6 月 1 日 | 3
乙 | C | 2020 年 6 月 1 日 | 4
乙 | F | 2020 年 12 月 1 日 |
乙| C | 2020 年 12 月 1 日 | 2
乙 | C | 2020 年 12 月 1 日 | 4
乙 | 磷 | 2020 年 12 月 1 日 | 2
乙 | 磷 | 2020 年 12 月 1 日 | 4

相应的输出是一个像这样的新数据帧:

样品 | 类型 | 日期 | 数数

========================

A | F | 1 Jun 2020 |2
A | F | 1 Dec 2020 |3
B | F | 1 Jun 2020 |3
B | F | 1 Dec 2020 |4  

在 Excel 中,我会使用 CountIfs 函数:
IF Type = "F" then countifs(Sample-column, Sample-value, Date-column, Date-value, Type-column, "<> F")

请帮忙(为糟糕的表格格式道歉)。

标签: pythondataframecountconditional-statements

解决方案


我建议以下代码:

import pandas as pd
df = pd.read_csv('sample.csv')
df['Type']=df['Type'].apply(lambda x: 'F' if x == 'P' or 'C' else '')
adf = df.groupby(['Sample', 'Type', 'Dat`enter code here`e'],as_index=False).agg({'Strike':['count']})

此代码读sample.csv入数据帧。然后,对列执行 lambda 查询Type。最终结果在adf.


推荐阅读