应用于数据框的一系列 if 语句

Posted

技术标签:

【中文标题】应用于数据框的一系列 if 语句【英文标题】:Series of if statements applied to data frame 【发布时间】:2018-07-13 01:47:41 【问题描述】:

我有一个关于如何完成这项任务的问题。我想在我的数据框中返回或分组一系列数字,这些数字来自 'PD' 列,范围从 0.001 到 1。我想要做的是对 .91>'PD'> 的那些进行分组.9 到 .91(或返回 .91 的值),.92>'PD'>=.91 到 .92,...,1>='PD' >=.99 到 1. 到名为'分组'。我一直在做的是手动执行每个 if 语句,然后将其与基本数据框合并。谁能帮助我以更有效的方式做到这一点?仍处于使用 python 的早期阶段。对不起,如果这个问题似乎很简单。感谢您的回答和您的时间。

【问题讨论】:

你应该查看pd.cut,它可以与groupby结合使用来聚合数据。如果您提供带有一些示例数据和预期输出的minimal reproducible example,您可能会得到更具体的答案。 【参考方案1】:

让你的数据看起来像这样

>>> df = pd.DataFrame('PD': np.arange(0.001, 1, 0.001), 'data': np.random.randint(10, size=999))
>>> df.head()
      PD  data
0  0.001     6
1  0.002     3
2  0.003     5
3  0.004     9
4  0.005     7

然后截掉 PD 列的最后一位小数。这有点棘手,因为在没有 str 转换的情况下进行舍入时会遇到很多问题。例如

>>> df['PD'] = df['PD'].apply(lambda x: float(':.3f'.format(x)[:-1]))
>>> df.tail()
       PD  data
994  0.99     1
995  0.99     3
996  0.99     2
997  0.99     1
998  0.99     0

现在您可以使用 pandas-groupby。随心所欲地处理数据,例如

>>> df.groupby('PD').agg(lambda x: ','.join(map(str, x)))
                     data
PD                       
0.00    6,3,5,9,7,3,6,8,4
0.01  3,5,7,0,4,9,7,1,7,1
0.02  0,0,9,1,5,4,1,6,7,3
0.03  4,4,6,4,6,5,4,4,2,1
0.04  8,3,1,4,6,5,0,6,0,5
[...]

请注意,由于我的示例中缺少 0.000,因此第一行短了一个项目。

【讨论】:

以上是关于应用于数据框的一系列 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

为啥 if 语句迭代返回模棱两可的系列 bool?

Xcode:带有文本框的 If 语句

MS Access - 带有组合框和文本框的 If 语句

VBA If 语句将 Vlookup 应用于整个范围

具有多个条件的 if 语句

c#基础语句——分支语句的应用