欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python数据框循环生成_python - 如何在 Pandas 的for循环迭代中创建多个数据框?

发布时间:2024/7/5 python 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python数据框循环生成_python - 如何在 Pandas 的for循环迭代中创建多个数据框? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我需要在熊猫中创建一个函数,该函数将单个数据框作为输入,并根据特定条件返回多个数据框作为输出。 (请检查下面的示例以了解情况)。我很难弄清楚如何做。我需要一些专家的编码建议。

范例1:

输入= 100列的数据框

输出=数据帧1的前10%列(第1到10列),数据帧2的后10%列(第11到20列),依此类推,直到最后10%的列(第91到100列)。

范例2:

输入= 109列的数据框

输出=列的前10%的dataframe1(四舍五入)(第1到11列),列的后10%的dataframe2(第12到23列),依此类推,直到最后10%的列(第109列)

这是我尝试开发的逻辑:

从总数的10%值中找到原始数据帧中的列为'n'

从原始数据框中选择第一个“ n”列。

将它们添加到新的数据框

从原始数据框中删除它们

检查原始数据帧中的列总数是否大于“ n”

如果否->重复步骤2至步骤5。

如果是->将所有剩余的列添加到最后创建的列

数据框。

我尝试了以下代码,但这是错误的。在下面的代码中,我尝试基于拆分百分比获取受尊重的列号,稍后我计划使用iloc函数使用这些数字拆分数据帧。def split_column_numbers(total_columns, percentage_split):

list1 = []

number = round((total_columns * (percentage_split/100)))

list1.append([0,number])

for i in range(number):

last_num = list1[-1][-1]

if (last_num < total_columns):

if((total_columns-last_num) > number):

list1.append([last_num+1, last_num+number])

else:

list1.append([last_num+1, total_columns])

return list1

split_column_numbers(101, 10)

谁能帮我这个逻辑是否正确以及如何实现?

最佳答案

如果将框架直接传递给该函数,则应该使您更容易确定以后要抓取的列。我们可以使用math.ceil进行四舍五入,并使用itertools.zip_longest划分为子组。from itertools import zip_longest

from math import ceil

def split_columns(frame, percentage_split):

cols = frame.columns

grp_size = ceil(len(cols) * percentage_split/100)

return [[c for c in grp if c] for grp in zip_longest(*(iter(cols),) * grp_size)]

例如,如果我们按如下所示设置一个虚拟框架:

from string import ascii_lowercase

import pandas as pd

tmp = pd.DataFrame(columns=list(ascii_lowercase))

然后,如果我们执行split_columns(tmp, 10),则会得到:

[['a', 'b', 'c'],

['d', 'e', 'f'],

['g', 'h', 'i'],

['j', 'k', 'l'],

['m', 'n', 'o'],

['p', 'q', 'r'],

['s', 't', 'u'],

['v', 'w', 'x'],

['y', 'z']]

如果我们执行split_columns(tmp, 30),则会得到:

[['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],

['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'],

['q', 'r', 's', 't', 'u', 'v', 'w', 'x'],

['y', 'z']]

然后,如果我们要使用这些列选择来创建新框架,则可以使用字典理解和enumerate来实现:

frames = {i: tmp[cols] for i, cols in enumerate(split_columns(tmp, 30))}

这给了我们一个字典,其中的键是整数(第一组列对应于0,第二组对应于1等),值是从数据帧中选择的列。

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的python数据框循环生成_python - 如何在 Pandas 的for循环迭代中创建多个数据框?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。