如何使用for循环根据给定条件填充数据框架上的列



我有一个pandas数据框,其中列ARRIVAL_DELAY充满了不同的值(float64)。我想插入一个新列COMPENSATION根据ARRIVAL_DELAY的值来填充.

我想让它看起来像这样:

ARRIVAL_DELAY      COMPENSATION
10                0
25                0
43                50
61                250

我想出了下面的代码,但它似乎根本不起作用(它在Jupyter笔记本上花费了几个小时,甚至没有完成任何事情)。此外,不显示任何错误或警告:

fdf.insert(13, 'COMPENSATION', 0)
compensacion = [0, 50, 100, 250, 500, 1000]
for row in fdf['ARRIVAL_DELAY']:
if row > 0 and row <= 15 : fdf['COMPENSATION'].add(compensacion[0])

elif row > 15 and row <= 30 : fdf['COMPENSATION'].add(compensacion[1])

elif row > 30 and row <= 60 : fdf['COMPENSATION'].add(compensacion[2])

elif row > 60 and row <= 120 : fdf['COMPENSATION'].add(compensacion[3])

elif row > 120 and row <= 180 : fdf['COMPENSATION'].add(compensacion[4])

else :fdf['COMPENSATION'].add(compensacion[5])

fdf.head(10)

我不明白怎么回事,有什么想法吗?

最后,我对Python有点陌生,所以如果有人有改进的想法,我将非常欢迎😃

谢谢!

这可以使用np来完成。选择优化后的代码

import pandas as pd
import numpy as np

df = pd.DataFrame({
'ARRIVAL_DELAY' : [10, 25, 30, 61]
})
condition_list = [
df['ARRIVAL_DELAY'].between(1, 15),
df['ARRIVAL_DELAY'].between(16, 30),
df['ARRIVAL_DELAY'].between(31, 60),
df['ARRIVAL_DELAY'].between(61, 120),
df['ARRIVAL_DELAY'].between(121, 180)
]
choice_list = [0, 50, 100, 250, 500]
df['COMPENSATION'] = np.select(condition_list, choice_list, 1000)
df

尽量避免遍历pandas数据框架的行。事实上,只有在万不得已的时候才这么做。Pandas和numpy提供了许多高度优化的矢量化函数。在大型数据帧上进行迭代可能会非常慢。(阅读本文了解更多)

numpy.select是解决@ArchAngelPwn提供的问题的绝佳选择。另一种方法是使用pandas cut(),它可以将连续值存储到离散的区间,而且效率也很高。

df = pd.DataFrame([10, 25, 43, 61], columns=['ARRIVAL_DELAY'])
df['COMPENSATION'] = pd.cut(df.ARRIVAL_DELAY, 
[0, 15, 30, 60, 120, 180, np.inf], 
labels=[0, 50, 100, 250, 500, 1000])
print(df)
ARRIVAL_DELAY COMPENSATION
0             10            0
1             25           50
2             43          100
3             61          250

相关内容

  • 没有找到相关文章

最新更新