我将Excel电子表格转换为Python,以便自动化并加速多项任务。我需要向DataFrame添加几个列,并根据前一列中的值向它们添加数据。我已经使用两个嵌套的for循环工作,但它真的很慢,我知道Pandas并不是专为逐个细胞工作而设计的。以下是我的问题样本:
import pandas as pd
results = pd.DataFrame({'scores':[78.5, 91.0, 103.5], 'outcomes':[1,0,1]})
thresholds = [103.5, 98.5, 93.5, 88.5, 83.5, 78.5]
for threshold in thresholds:
results[str(threshold)] = 0
for index, row in results.iterrows():
if row['scores'] > threshold:
results.set_value(index, str(threshold), row['outcomes'])
print (results)
正确的输出:
outcomes scores 103.5 98.5 93.5 88.5 83.5 78.5
0 1 78.5 0 0 0 0 0 0
1 0 91.0 0 0 0 0 0 0
2 1 103.5 0 1 1 1 1 1
更有效的方法是什么?我一直在想要将DataFrame转换为按列而不是行来工作,但我无法使用任何工作。 谢谢你的帮助!
答案 0 :(得分:2)
这可以胜任:
import pandas as pd
results = pd.DataFrame({'scores':[78.5, 91.0, 103.5], 'outcomes':[1,0,1]})
thresholds = [103.5, 98.5, 93.5, 88.5, 83.5, 78.5]
for threshold in thresholds:
results[str(threshold)] = results[['scores','outcomes']].apply(lambda x: x['outcomes'] if x['scores']>threshold else 0, axis=1)
print (results)
哪些代词
outcomes scores 103.5 98.5 93.5 88.5 83.5 78.5
0 1 78.5 0 0.0 0.0 0.0 0.0 0.0
1 0 91.0 0 0.0 0.0 0.0 0.0 0.0
2 1 103.5 0 1.0 1.0 1.0 1.0 1.0
答案 1 :(得分:1)
下面是一个完全矢量化的解决方案,不使用循环或列表理解。
{{1}}