对数据框进行子集化并对多列应用累积操作
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 那么我不确定我是否理解你的逻辑以上是关于对数据框进行子集化并对多列应用累积操作的主要内容,如果未能解决你的问题,请参考以下文章