python - 如何在 30 个数据帧中重复相同的任务 - Python Pandas
问题描述
我有以下数据框(称为aa1):
d = {'Index' : pd.Series([25, 7, 7, 5, 5, 8])}
aa1 = pd.DataFrame(d)
我创建了一个名为Quartile_Index的新列,它对Index列值的四分位数进行评分(注意:这是我能找到的最佳解决方案,因为 pd.qcut 库不允许您有重复的 bin 边缘):
quantile_frame = aa1.quantile(q=[0.25, 0.5, 0.75])
quantile_ranks = []
for index, row in aa1.iterrows():
if (row['Index'] <= quantile_frame.ix[0.25]['Index']):
quantile_ranks.append('q1')
elif (row['Index'] >= quantile_frame.ix[0.25]['Index'] and row['Index'] <= quantile_frame.ix[0.5]['Index']):
quantile_ranks.append('q2')
elif (row['Index'] >= quantile_frame.ix[0.5]['Index'] and row['Index'] <= quantile_frame.ix[0.75]['Index']):
quantile_ranks.append('q3')
else:
quantile_ranks.append('q4')
aa1['Quartile_Index'] = quantile_ranks
这是我能想到的最好的解决方案,但我需要两个问题的帮助来进一步优化我的代码/逻辑:
有没有更简单的方法用更简单的代码触发四分位列?pd.qcut 不允许您有重复的 bin 边缘,因此这不是解决方案。
我需要跨 30 个其他 pandas 数据帧(aa1、aa2、aa3 等)生成分位数列执行。我不想重复这 30 次,所以那里有解决方案吗?我还没有那么先进的循环。
解决方案
循环遍历数据帧的解决方案(使用 iloc 而不是 .ix[]):
data = [aa1,aa2]
for i in data:
quantile_frame = i.quantile(q=[0.25, 0.5, 0.75])
quantile_ranks = []
for index, row in i.iterrows():
if (row['Index'] <= quantile_frame.iloc[0]['Index']):
quantile_ranks.append('q1')
elif (row['Index'] >= quantile_frame.iloc[0]['Index'] and row['Index'] <= quantile_frame.iloc[1]['Index']):
quantile_ranks.append('q2')
elif (row['Index'] >= quantile_frame.iloc[1]['Index'] and row['Index'] <= quantile_frame.iloc[2]['Index']):
quantile_ranks.append('q3')
else:
quantile_ranks.append('q4')
i['Quartile_Index'] = quantile_ranks
推荐阅读
- css - 我需要将我的 wordpress 主题添加到我想要的设计中
- uwp - 如何识别该应用程序在 UWP C# 中的哪个监视器上运行
- javascript - SyntaxError:意外的标识符“modal_html”。期望一个':'
- json - 我如何解析 json 天气响应
- java - 如何根据从微调器中选择的代码在 textView 中显示建议的单词?
- c# - 球体上的相机运动
- c++ - 如何修复编译器错误:“'strtok' 函数可能不安全”
- angular - Textfield not displaying in ng2-smart-table
- reactjs - 如何使用 reactjs 从后端的表中检索数据?
- django - 如何在 React 组件中进行 Materialise 渲染?