Python 如何从具有不同行和列索引的df2创建df1?

Python 如何从具有不同行和列索引的df2创建df1?,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,我想用df2值填充df1,我可以用嵌套循环实现它,但这需要很多时间。 有什么聪明的方法可以做到这一点吗? 另外,df的大小约为8000行,8000列 df1最初是这样的 A B C D A 0 0 0 0 B 0 0 0 0 C 0 0 0 0 D 0 0 0 0 P Q R S T P 1 5 7 5 3 Q 5 6 2 8 5

我想用df2值填充df1,我可以用嵌套循环实现它,但这需要很多时间。 有什么聪明的方法可以做到这一点吗? 另外,df的大小约为8000行,8000列

df1最初是这样的

   A    B    C   D
A  0    0    0   0
B  0    0    0   0
C  0    0    0   0
D  0    0    0   0
   P    Q    R   S   T
P  1    5    7   5   3
Q  5    6    2   8   5
R  3    5    4   9   3
S  9    4    5   0   8
T  2    9    4   2   1
   A    B    C   D
A  1    8    7   5
B  7    21   6   10
C  3    8    4   9
D  9    12   5   0
df2是这样的

   A    B    C   D
A  0    0    0   0
B  0    0    0   0
C  0    0    0   0
D  0    0    0   0
   P    Q    R   S   T
P  1    5    7   5   3
Q  5    6    2   8   5
R  3    5    4   9   3
S  9    4    5   0   8
T  2    9    4   2   1
   A    B    C   D
A  1    8    7   5
B  7    21   6   10
C  3    8    4   9
D  9    12   5   0
现在df1和df2的索引之间有对应列表

df1    df2
A      P
B      Q
C      R
D      S
B      T
df1应该这样填充

   A    B    C   D
A  0    0    0   0
B  0    0    0   0
C  0    0    0   0
D  0    0    0   0
   P    Q    R   S   T
P  1    5    7   5   3
Q  5    6    2   8   5
R  3    5    4   9   3
S  9    4    5   0   8
T  2    9    4   2   1
   A    B    C   D
A  1    8    7   5
B  7    21   6   10
C  3    8    4   9
D  9    12   5   0
这里,由于“B”在列表中出现两次,因此它将“Q”和“T”的值相加


提前感谢。

您可以尝试更改df1中的行和列名称(基于与df2的通信),对于多个通信(如B)的情况,您可以先将它们命名为B1、B2等。。。然后把它们加起来:


> di
{'Q': 'B1', 'P': 'A', 'S': 'D', 'R': 'C', 'T': 'B2'}
> df1 = df2.copy()
> df1.columns = [di[c] for c in df2.columns]
> df1.index   = [di[c] for c in df2.index]
> ## sum B1,B2 column wise
> df1['B'] = df1.B1 + df1.B2
> ## sum B1,B2 row wise
> df1.at["B", :] =  df1.loc["B1"] + df1.loc["B2"]
> ## subset with original index and column names
> df1[["A", "B", "C", "D"]].loc[["A", "B", "C", "D"]]
##output
     A     B    C     D
A  1.0   8.0  7.0   5.0
B  7.0  21.0  6.0  10.0
C  3.0   8.0  4.0   9.0
D  9.0  12.0  5.0   0.0
  • 您还可以将df2堆叠到一个系列中,因为列成为系列的内部索引(级别为1)
  • 然后将索引替换为
    {'P':'A','Q':'B','R':'C','S':'D','T':'B'}
  • 使用带sum的
    groupby
    添加具有相同索引的值,然后取消堆栈以将内部级别索引转换为列

  • 您需要在问题中包括什么数据类型df2。它是一个哈希表,一个字典,一个二维数组。我已经看到建立一个字典来映射df1到df2的字母会很好。但是如果不知道这些的数据结构,就很难知道答案应该是什么。这是一个2D数组。您还需要添加为什么将
    B
    添加到df1和df2索引之间的对应列表中。基于什么?