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