在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中提供的函数获取公式。