在Python中,如何在多个数据帧之间计算和重新分配数值?

在Python中,如何在多个数据帧之间计算和重新分配数值?,python,dataframe,Python,Dataframe,我试图找出如何根据某些标准在多个数据帧之间重新分配数值,但我不确定具体如何进行 id_1 stock_1 0 a 4 1 b 3 2 c 3 id_2 stock_2 0 a 4 1 b 3 2 c 4 id_3 stock_3 0 a 5 1 b 4 2 c 3 为此,我创建了3个小样本数据帧

我试图找出如何根据某些标准在多个数据帧之间重新分配数值,但我不确定具体如何进行

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
为此,我创建了3个小样本数据帧

import pandas as pd

first = {'id_1': ['a','b','c'],
         'stock_1': [7,2,3]}

df1 = pd.DataFrame(first, columns = ['id_1','stock_1'])

print(df1)

second = {'id_2': ['a','b','c'],
         'stock_2': [1,2,6]}

df2 = pd.DataFrame(second, columns = ['id_2','stock_2'])

print(df2)

third = {'id_3': ['a','b','c'],
         'stock_3': [5,6,1]}

df3 = pd.DataFrame(third, columns = ['id_3','stock_3'])

print(df3)

   id_1  stock_1
0    a        7
1    b        2
2    c        3

  id_2  stock_2
0    a        1
1    b        2
2    c        6

  id_3  stock_3
0    a        5
1    b        6
2    c        1
  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
现在我想知道如何编写一个函数,它将交叉检查所有3个项目的所有值,并以一种查找MAX和MIN(a,b,c)的方式重新分配它们,然后从MAX中减去,再加上MIN,直到平均值

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
我希望生成的表看起来像

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
如果我们查看所有3个数据帧中的项“a”,我们会得到值;7, 1, 5 其中7为最大值,1为最小值

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
汇总为(7+1+5)/3=4时的平均值

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
因此,为了将正确的量添加到最小值,我们需要知道平均值和最小值之间的差异

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
(平均-分钟)=(4-1)=3我们称之为DIF

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
所以我想我们必须把DIF加到MIN上

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
(DIF+MIN)=(3+1)=4

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
然后从MAX中减去DIF得到新的值

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3

(MAX-DIF)=(7-3)=4

我们需要做的第一件事是在一个地方获取所有数据。为了方便起见,我将首先为每个
数据帧设置索引,但如果这对您来说真的很重要,您可以绕过它

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
df1.set_index('id_1',inplace=True)
df2.set_index('id_2',inplace=True)
df3.set_index('id_3',inplace=True)
为了将所有数据汇集在一起,我们只需将所有数据连接起来:

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
joined = df1.join(df2).join(df3)
print(joined)
这张照片是:

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
      stock_1  stock_2  stock_3
id_1                           
a           7        1        5
b           2        2        6
c           3        6        1
为了方便起见,我将转置矩阵(这允许使用默认轴进行操作)

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
对于特定的计算,您可以简单地添加
min
max
mean
的结果,例如:

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
diff = final_df.mean().round()-final_df.min()

我们需要做的第一件事是在一个地方获取所有数据。为了方便起见,我将首先为每个
数据帧设置索引,但如果这对您来说真的很重要,您可以绕过它

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
df1.set_index('id_1',inplace=True)
df2.set_index('id_2',inplace=True)
df3.set_index('id_3',inplace=True)
为了将所有数据汇集在一起,我们只需将所有数据连接起来:

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
joined = df1.join(df2).join(df3)
print(joined)
这张照片是:

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
      stock_1  stock_2  stock_3
id_1                           
a           7        1        5
b           2        2        6
c           3        6        1
为了方便起见,我将转置矩阵(这允许使用默认轴进行操作)

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
对于特定的计算,您可以简单地添加
min
max
mean
的结果,例如:

  id_1  stock_1
0    a        4
1    b        3
2    c        3

  id_2  stock_2
0    a        4
1    b        3
2    c        4

  id_3  stock_3
0    a        5
1    b        4
2    c        3
diff = final_df.mean().round()-final_df.min()

你能举一个输出的例子吗?嗨,我用Desired output编辑了这个问题,但仍然不理解“交叉检查所有3个项目的所有值,并以一种方式重新分配它们,它会查找最大值和最小值(a、b、c),然后从最大值中减去,再加上最小值,直到平均值。”。你能用一些从7到4的公式计算作为第一个数据帧的输出来详细说明这个问题吗?我扩展了问题,你能给出一个输出的例子吗?嗨,我用Desired output编辑了这个问题,仍然不理解这行“交叉检查所有3项的所有值,并以查找最大值和最小值(a、b、c)的方式重新分配它们,然后从最大值中减去,再加上最小值,直到平均值。“。你能用一些从7到4的公式计算作为第一个数据帧的输出来详细说明这个问题吗?我扩展了这个问题谢谢你的输入,我理解索引、联接等。我想我应该开始计算一个循环,它将均匀地计算所有‘项’(a、b、c)的值。”将结果再次显示为单独的表格和打印的消息“3是从df1'中添加的,不需要。一旦您将所有数据放入一个
数据框
联接
,您就可以使用pandas中提供的函数来获得公式。感谢您的输入,我理解索引、联接等。我想我应该开始计算一个循环,该循环将对所有“项”(a、b、c)进行计算再次将结果显示为单独的表格,并从df1'无需添加打印的消息“3”。一旦您将所有数据放入一个
数据框
合并
,则您可以使用pandas中提供的函数获取公式。