【问题标题】:Same function for all columns in DataFrameDataFrame中所有列的相同功能
【发布时间】:2020-04-29 23:20:06
【问题描述】:

我的数据包含 75 列。我想为所有列分别计算下面的函数并想写一个数据框。

我的数据列,

df3.columns

Index(['R_26', 'R_31', 'R_38', 'R_65', 'R_71', 'R_86', 'R_25', 'R_63', 'R_59',
   'R_19', 'R_35', 'R_84', 'R_24', 'R_68', 'S_15', 'R_85', 'R_57', 'R_22',
   'R_30', 'R_15', 'R_16', 'R_69', 'S_16', 'R_6', 'R_87', 'R_40', 'R_20',
   'R_17', 'R_18', 'R_21', 'R_28', 'S_9', 'R_33', 'R_56', 'S_10', 'R_7',
   'S_8', 'R_29', 'R_1', 'R_66', 'S_18', 'S_6', 'R_64', 'R_34', 'R_37',
   'R_3', 'R_54', 'R_67', 'S_22', 'R_13', 'R_48', 'S_11', 'R_58', 'S_23',
   'S_3', 'S_4', 'R_60', 'S_7', 'R_32', 'S_5', 'R_51', 'R_8', 'R_10',
   'R_9', 'S_14', 'R_62', 'S_17', 'S_21', 'R_14', 'R_55', 'R_2', 'R_50',
   'R_49', 'R_53', 'FRAUD'],
  dtype='object')

我的函数(仅针对 1 个样本“R_26”);

df4 = df3[df3.R_26 == 1]
Sm = df4.R_26.sum()
Fr = df4.FRAUD.sum()
Rate = b / a

因为我想要数据框样本;


列率


R_26 0.15 R_31 0.45 . . . . . .

【问题讨论】:

  • Rate = b / aRate = Fr / Sm 还是 Rate = Sm/ Fr ?

标签: pandas loops for-loop iteration calculated-columns


【解决方案1】:

您可以使用DataFrame.melt 进行反透视,然后使用DataFrame.query 过滤1 值,聚合sum,使用DataFrame.assign 创建Rate 列,Series.div 用于除法,DataFrame.pop 用于提取列最后通过DataFrame.reset_index将索引转换为列:

df = (df3.melt('FRAUD')
        .query('value == 1')
        .groupby('variable')
        .sum()
        .assign(Rate = lambda x: x.pop('FRAUD').div(x.pop('value')))
        .reset_index())
print (df)

【讨论】:

  • 大师,x.pop('FRAUD') 在这里做什么?
  • @YOLO - 这有点像使用列和删除,所以而不是 drop 两列稍后它都使用 pop 删除
  • @jezrael 我需要再问你一个问题。如果我想使用下面的 2 个不同的函数(求和和计数),我应该如何编辑你的代码? df4 = df3[df3.R_26 == 1] Sm = df4.R_26.count() Fr = df4.FRAUD.sum() 速率 = b / a
  • @MertTürkyılmaz - 你能检查一下将.groupby('variable').sum() 更改为.groupby('variable').agg({'value':'size','FRAUD':'sum'}) 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多