使用字典作为键划分两个 Pandas DataFrames
Divide two Pandas DataFrames using a dictionary as a key
我有一个 DataFrame df1
:
df1 = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))
df1.head()
A B C D
0 9 8 1 1
1 9 7 1 6
2 0 6 7 5
3 5 1 6 0
4 4 0 5 4
第二个 DataFrame df2
:
df2 = pd.DataFrame(np.random.randint(0,10,size=(10, 3)), columns=list('FGH'))
df2.head()
F G H
0 8 5 9
1 3 0 7
2 2 5 4
3 3 5 4
4 5 6 6
还有一个字典字典:
dict = {"A" : "F", "B" : "F", "C" : "H", "D" : "G" }
我想使用字典的元素作为键来划分两个Dataframes:A列F列,B列F列,C列H列和D列G列。结果应该是:
df3.head
0 1.125 1.000 0.111 0.200
1 3.000 2.333 1.429 NA
...
谢谢。
您需要做的就是直接对 Columns 或 DataFrame Series 使用 /
运算符。
df3 = pd.DataFrame() #initialize an empty dataframe
for i in dict:
df3[i+"/"+dict[i]] = df1[i]/df2[dict[i]]
df3.head()
遍历字典中的项目,并将 df1
中构成列名的键与值(df2
的列名)相除。这些形成了一个系列对象,其名称与键相对应。沿列方向连接它们。
最后,reindex
它们根据 df1
的列保留顺序。
df = pd.concat([pd.Series(df1[k]/df2[v], name=k) for k,v in my_dict.items()], axis=1)
df.reindex(columns=df1.columns)
注意: 我已经更改了你的词典名称,因为不建议使用 dict
来顺便给它们命名也对应一个内置类型。
我有一个 DataFrame df1
:
df1 = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))
df1.head()
A B C D
0 9 8 1 1
1 9 7 1 6
2 0 6 7 5
3 5 1 6 0
4 4 0 5 4
第二个 DataFrame df2
:
df2 = pd.DataFrame(np.random.randint(0,10,size=(10, 3)), columns=list('FGH'))
df2.head()
F G H
0 8 5 9
1 3 0 7
2 2 5 4
3 3 5 4
4 5 6 6
还有一个字典字典:
dict = {"A" : "F", "B" : "F", "C" : "H", "D" : "G" }
我想使用字典的元素作为键来划分两个Dataframes:A列F列,B列F列,C列H列和D列G列。结果应该是:
df3.head
0 1.125 1.000 0.111 0.200
1 3.000 2.333 1.429 NA
...
谢谢。
您需要做的就是直接对 Columns 或 DataFrame Series 使用 /
运算符。
df3 = pd.DataFrame() #initialize an empty dataframe
for i in dict:
df3[i+"/"+dict[i]] = df1[i]/df2[dict[i]]
df3.head()
遍历字典中的项目,并将 df1
中构成列名的键与值(df2
的列名)相除。这些形成了一个系列对象,其名称与键相对应。沿列方向连接它们。
最后,reindex
它们根据 df1
的列保留顺序。
df = pd.concat([pd.Series(df1[k]/df2[v], name=k) for k,v in my_dict.items()], axis=1)
df.reindex(columns=df1.columns)
注意: 我已经更改了你的词典名称,因为不建议使用 dict
来顺便给它们命名也对应一个内置类型。