对数据框进行子集化并对多列应用累积操作

Posted

技术标签:

【中文标题】对数据框进行子集化并对多列应用累积操作【英文标题】:Subsetting the data frame and applying cumulative operation on multiple columns 【发布时间】:2021-10-26 20:29:35 【问题描述】:

我有一个如下所示的数据集。

df=pd.DataFrame('unit': ['ABC', 'DEF', 'GEH','IJK','DEF','XRF','BRQ'], 'A': [1,1,1,0,0,0,1], 'B': [1,1,1,1,1,1,0],'C': [1,1,1,0,0,0,1],'row_num': [7,6,5,4,3,2,1])

我正在尝试获取逻辑

第 1 步 - 考虑具有 row_number 第 2 步 - A、B、C 列共有 12 个值(0 和 1)。 步骤 3 - 计算 A、B、C 列中“1”的数量。从例子 有五个 1 和七个 0,计算为 40%(5/12) 1 的。 Steps-4 因为 1 的计数大于 40% 创建列标志 如果 1 的计数小于 10% 则为 1,否则为 0。

【问题讨论】:

您能对当前答案提供反馈吗? @mozway,非常感谢 【参考方案1】:

希望这次我明白了:

subdf = df.iloc[3:, 1:4]
df['flag'] = 1 if subdf.values.sum()/subdf.size >= 0.1 else 0

输出:

  unit  A  B  C  row_num  flag
0  ABC  1  1  1        7     1
1  DEF  1  1  1        6     1
2  GEH  1  1  1        5     1
3  IJK  0  1  0        4     1
4  DEF  0  1  0        3     1
5  XRF  0  1  0        2     1
6  BRQ  1  0  1        1     1

【讨论】:

注意,问题是针对row_num <= 4,而不是index > 3 感谢您的建议。当我在只有一个数据集的情况下尝试数据集时,我期望标志为“0”,因为它低于 1/12,即低于 10%。 @dm2 我认为这是一个错字。我再次阅读了这个问题,我想知道我是否理解所有逻辑。我会看看 OP 是否提供更多详细信息 df=pd.DataFrame('unit': ['ABC', 'DEF', 'GEH','IJK','DEF','XRF','BRQ'], ' A':[1,1,1,0,0,0,0],'B':[1,1,1,1,0,0,0],'C':[1,1,1, 0,0,0,0],'row_num': [7,6,5,4,3,2,1]) @HKE 那么我不确定我是否理解你的逻辑

以上是关于对数据框进行子集化并对多列应用累积操作的主要内容,如果未能解决你的问题,请参考以下文章

pyspark中基于条件对多列进行分组的累积和函数

对多个数据框进行子集化并聚合它们以有效地进行绘图

GroupBy 多列作为键并对多列求和,如 sql?

按多列对数据框进行分组[重复]

对多列使用连接的累积总和

对 pyspark 数据框的多列应用不同的函数