Python 如何从具有不同行和列索引的df2创建df1?
我想用df2值填充df1,我可以用嵌套循环实现它,但这需要很多时间。 有什么聪明的方法可以做到这一点吗? 另外,df的大小约为8000行,8000列 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
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
{'P':'A','Q':'B','R':'C','S':'D','T':'B'}
groupby
添加具有相同索引的值,然后取消堆栈以将内部级别索引转换为列您需要在问题中包括什么数据类型df2。它是一个哈希表,一个字典,一个二维数组。我已经看到建立一个字典来映射df1到df2的字母会很好。但是如果不知道这些的数据结构,就很难知道答案应该是什么。这是一个2D数组。您还需要添加为什么将
B
添加到df1和df2索引之间的对应列表中。基于什么?