数据集示例:
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]
})
我知道怎么在Pandas身上做。下面是我的代码:
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]]
我可以创建新的列一个接一个在考拉使用:
kdf = kdf.assign(power_1_Status=(kdf['power_1'].gt(100)).astype(int).map({0:'OFF',1:'ON'}))
但是我不知道如何为所有的幂列做这件事,因为我的数据集真的很大,有50多个幂列和1000多个其他列。我使用的是Databricks。我不想为所有的幂列写50多行代码。我这里的问题是我不知道如何在Koalas的for循环中动态地将“_Status”添加到我原来的列名“power_1”中。我尝试过使用类似Pandas结构的for循环。下面是我尝试过但失败的结果。
for col in cols:
kdf = kdf.assign(col+'Status'=(kdf[col].gt(100)).astype(int).map({0:'OFF',1:'ON'}))
谢谢
2条答案
按热度按时间wsxa1bj11#
我看了一下Koala的文档,使用了一些类似于pandas的函数,所以试试看它是否有效:
在创建过滤的 Dataframe 时,您可能希望使用副本;只是一个建议,因为我不知道什么成本与考拉。
z0qdvdin2#
输出: