我对如何对数据帧进行计算有些困惑。 基本上我有10个数据帧,比如说10行和10列。 我想基本上遍历每个数据框中的某个单元格,将它们附加到列表中并在其上应用函数。
示例: 从10个数据框中获取所有df(0,0)并将它们附加到列表中。最终对它们应用归一化功能,并将归一化的分数填充回各自的数据框。
下面是我要从10个不同的数据框中检索所有df(0,0)单元(例如,rangex为列表)后要进行的计算
import numpy as np
df1 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
... columns=['a', 'b', 'c', 'd', 'e'])
df2 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
... columns=['a', 'b', 'c', 'd', 'e'])
df3 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
... columns=['a', 'b', 'c', 'd', 'e'])
df4 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
... columns=['a', 'b', 'c', 'd', 'e'])
rangex = [df1.iloc[0,0], df2.iloc[0,0], df3.iloc[0,0], df4.iloc[0,0]]
OldRange = (3.0 - (-3.0))
NewRange = (100.0 - 0.0)
listrangex=[]
for elem in rangex:
val = (elem - np.mean(rangex))/np.std(rangex)
val = (((val - (-3.0)) * NewRange) / OldRange) + 0.0
listrangex.append( val )
非常感谢!
答案 0 :(得分:2)
IIUC:一次全部(排序)
np.random.seed([3, 1415])
dict_of_dfs = {f'df{i}': pd.DataFrame(np.random.randn(25).reshape(5, 5)) for i in range(10)}
OldRange = np.array([-3, 3])
NewRange = np.array([0, 100])
如果您有数据帧列表,则获取字典的简单方法是
dict_of_dfs = dict(enumerate(list_of_dfs))
df = pd.concat(dict_of_dfs)
mu = df.mean(level=1)
sg = df.std(level=1)
def nrm(d):
_d = (d - mu) / sg
o = OldRange[1] - OldRange[0]
n = NewRange[1] - NewRange[0]
return (_d - OldRange[0]) * o / n + NewRange[0]
for k, d in dict_of_dfs.items():
d.loc[:] = nrm(d)
groupby
df.groupby(level=0).apply(lambda d: nrm(d.xs(d.name)))
df.groupby(level=1).pipe(lambda g: df.sub(g.mean(), level=1).div(g.std(), level=1)) \
.sub(OldRange[0]).mul(np.diff(OldRange)[0]).div(np.diff(NewRange)[0]).add(NewRange[0])
mu
0 1 2 3 4
0 -0.065247 -0.221818 -0.272167 -0.666434 0.353295
1 0.246533 0.049811 -0.279924 -0.025732 0.032529
2 -0.168676 -0.659385 -0.600390 0.211917 -0.007368
3 0.626222 0.072566 -0.702487 -0.338123 -0.009424
4 -0.286499 0.549944 -0.257438 -0.177977 0.254984
sg
0 1 2 3 4
0 1.307826 1.226733 1.250311 0.931911 0.833170
1 0.758097 0.610464 0.988931 0.780028 0.696543
2 0.679647 0.962712 0.838219 0.530177 1.029039
3 0.774872 0.751137 0.570692 0.743676 0.966374
4 0.935141 0.988090 0.808165 0.937511 1.023745
# Before
dict_of_dfs['df0']
0 1 2 3 4
0 -2.129724 -1.268466 -1.970500 -2.259055 -0.349286
1 -0.026955 0.316236 0.348782 0.715364 0.770763
2 -0.608208 0.352390 -0.352521 -0.415869 -0.911575
3 -0.142538 0.746839 -1.504157 0.611362 0.400219
4 -0.959443 1.494226 -0.346508 -1.471558 1.063243
# After
dict_of_dfs['df0']
0 1 2 3 4
0 0.085287 0.128808 0.098500 0.077461 0.129404
1 0.158355 0.206186 0.218145 0.237005 0.243591
2 0.141198 0.243058 0.197743 0.108954 0.127279
3 0.120473 0.233860 0.095716 0.256605 0.205434
4 0.136823 0.237340 0.173387 0.097212 0.227371
答案 1 :(得分:0)
我可能要离开了,但这是你想要做的吗?
使用for
循环,以i
的形式从每个c
中提取行df
和列x
中的单元格,将其操作为{{ 1}},然后附加到val
:
l