您可以创建一个每 100 个值才递增的系列,并使用它对数据框进行分组。我正在使用一个较小的示例来适应屏幕并显示一些处理选项。
import pandas as pd
import numpy as np
df = pd.DataFrame({"FOO":list(range(50))})
# using each group
for idx,grp in df.groupby(np.arange(len(df))//5):
print(idx,grp.FOO.values)
# using a pandas chained method
result = df.groupby(np.arange(len(df))//5).sum()
print(result)
# applying your own function to the group dataframes
df.groupby(np.arange(len(df))//5).apply(lambda df: print(df.FOO.values))
,
为了测试,让我们将源 DataFrame 创建为:
df = pd.DataFrame({'A': np.arange(101,122,2)})
假设您的函数为源的子集生成高程
数据框是:
def myFun(src,txt):
return txt + src.A.astype(str)
然后您可以将新列生成为连续的串联
要求 df 的子集为:
tt = 'ABC'
n = len(tt)
df['Elev'] = pd.concat([ myFun(df[i::n],x) for i,x in enumerate(tt) ])
详情:
-
tt
是源字符串 - 附加到源列的字母列表。
-
n
是生成 df 的每个源子集的步骤。
-
for i,x in...
从 tt 及其索引中检索连续的字母。
i 是源子集的编号,同时是起始子集的编号
df 和 x 中的点是添加到前面的字母
结果。
-
df[i::n]
选择源 DataFrame 的一个子集。
-
pd.concat
连接部分结果。
结果是:
A Elev
0 101 A101
1 103 B103
2 105 C105
3 107 A107
4 109 B109
5 111 C111
6 113 A113
7 115 B115
8 117 C117
9 119 A119
10 121 B121
如您所见,以 A 开头的值来自第一个
调用,从第二个开始以 B 开头的值,依此类推。
如果由于某种原因您不能使用列表推导式,您可以
在“普通”循环中执行此操作,例如:
res = []
for i,x in enumerate(tt):
res.append(myFun(df[i::n],x))
df['Elev'] = pd.concat(res)
本文链接:https://www.f2er.com/4694.html