Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Databricks Koalas:使用for循环创建具有条件的新列,并根据旧列名动态命名新列_Python_Pandas_Apache Spark_Databricks_Spark Koalas - Fatal编程技术网

Python Databricks Koalas:使用for循环创建具有条件的新列,并根据旧列名动态命名新列

Python Databricks Koalas:使用for循环创建具有条件的新列,并根据旧列名动态命名新列,python,pandas,apache-spark,databricks,spark-koalas,Python,Pandas,Apache Spark,Databricks,Spark Koalas,示例数据集: kdf = ks.DataFrame({"power_1": [50, 100, 150, 120, 18], "power_2": [50, 150, 150, 120, 18], "power_3": [60, 100, 150, 120, 18], "power_4": [150, 90, 150, 120, 18], "p

示例数据集:

kdf = ks.DataFrame({"power_1": [50, 100, 150, 120, 18], 
                   "power_2": [50, 150, 150, 120, 18],
                   "power_3": [60, 100, 150, 120, 18],
                   "power_4": [150, 90, 150, 120, 18],
                   "power_30": [50, 60, 150, 120, 18]
                   })

df = pd.DataFrame({"power_1": [50, 100, 150, 120, 18], 
                   "power_2": [50, 150, 150, 120, 18],
                   "power_3": [60, 100, 150, 120, 18],
                   "power_4": [150, 90, 150, 120, 18],
                   "power_30": [50, 60, 150, 120, 18]
                   })
我知道如何在熊猫身上做。以下是我的代码:

cols = df.filter(regex='power_').columns
for col in cols:
    df[col] = pd.to_numeric(df[col],errors='coerce')
    df[col+'_Status']= ['OFF' if x<100 or np.isnan(x) else 'ON' for x in df[col]]
但我不知道如何对所有的power列执行此操作,因为我的数据集非常大,包含50多个power列和1000多个其他列。我正在使用数据记录器。我不想为所有的电源列写50多行代码。我这里的问题是,我不知道如何在考拉的for循环中动态地将“\u Status”添加到我原来的列名“power\u 1”中。 我尝试使用类似的熊猫结构来创建循环。以下是我尝试过但失败的东西

for col in cols:
    kdf = kdf.assign(col+'Status'=(kdf[col].gt(100)).astype(int).map({0:'OFF',1:'ON'}))

谢谢

我看了考拉的文档,并使用了一些与熊猫类似的功能,所以请尝试一下,看看它是否有效:

  #select columns you are interested in into a separate dataframe
  filtered = df.filter(like='power_')

 #drop the filtered columns from df
 df = df.drop(filtered.columns,axis=1)

 #do some cleanup
 filtered = (filtered
            .astype(int)
            .gt(100)
            .applymap(lambda x: 'OFF' if x==0 else 'ON')
            .add_suffix('_STATUS'))

 #hook back to original dataframe
 pd.concat([df,filtered],axis=1)
在创建过滤后的数据帧时,您可能希望使用副本;只是一个建议,因为我不知道在考拉身上的花费是多少

 power_1_STATUS power_2_STATUS  power_3_STATUS  power_4_STATUS  power_30_STATUS
0   OFF              OFF              OFF            ON               OFF
1   OFF               ON              OFF            OFF              OFF
2   ON                ON               ON            ON               ON
3   ON                ON               ON            ON               ON
4   OFF              OFF              OFF            OFF              OFF

谢谢它起作用了。但是考拉花了大约6.97分钟来创建这些列。熊猫只需要15.83秒。不熟悉考拉;对文档的浏览表明您可以使用pyspark的接口。因此,不妨尝试一下,看看它是否能改善结果。
 power_1_STATUS power_2_STATUS  power_3_STATUS  power_4_STATUS  power_30_STATUS
0   OFF              OFF              OFF            ON               OFF
1   OFF               ON              OFF            OFF              OFF
2   ON                ON               ON            ON               ON
3   ON                ON               ON            ON               ON
4   OFF              OFF              OFF            OFF              OFF