我有一個資料框df1:
id1_a id2_a id3_a id1_b id2_b id3_b
a1 a2 a3 b1 b2 b3
aa1 a2 a3 b12 b22 b23
ac1 c2 a3 bc2 bc2 bc3
我想用它作為字典來替換列 id1_a、id2_a、id3_a 中的值
這個資料框df2:
id1_a id2_a id3_a
a1 a2 a3
a1 a2 a3
aa1 a2 a3
ac1 c2 a3
所以想要的結果是
id1_a id2_a id3_a
b1 b2 b3
b1 b2 b3
b12 b22 b23
bc2 bc2 bc3
我怎么能那樣做?如果只有一列,我會把它變成字典并替換值,但是在三列的情況下該怎么辦?
uj5u.com熱心網友回復:
_a如果需要用在和列之間創建的字典替換所有列,_b請使用:
df1.columns = df1.columns.str.split('_', expand=True)
df1 = df1.stack(0)
df2 = df2.replace(dict(zip(df1['a'], df1['b'])))
print (df2)
id1_a id2_a id3_a
0 b1 b22 bc3
1 b1 b22 bc3
2 b12 b22 bc3
3 bc2 bc2 bc3
如果需要替換為匹配列Series,請先創建以指定它:
print (df1)
id1_a id2_a id3_a id1_b id2_b id3_b
0 a1 a2 a3 b1 b2 b3
1 aa1 a1 a3 b12 b22 b23
2 ac1 c2 a3 bc2 bc2 bc3
print (df2)
id1_a id2_a id3_a
0 b1 b22 bc3
1 b1 b2 bc3
2 b12 b2 bc3
3 bc2 bc2 bc3
df1.columns = df1.columns.str.split('_', expand=True)
s = (df1.stack(0)
.groupby(level=1)
.apply(lambda x: dict(zip(x['a'], x['b'])))
.add_suffix('_a'))
print (s)
id1_a {'a1': 'b1', 'aa1': 'b12', 'ac1': 'bc2'}
id2_a {'a2': 'b2', 'a1': 'b22', 'c2': 'bc2'}
id3_a {'a3': 'bc3'}
dtype: object
df2 = df2.replace(s)
print (df2)
id1_a id2_a id3_a
0 b1 b22 bc3
1 b1 b2 bc3
2 b12 b2 bc3
3 bc2 bc2 bc3
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494237.html
標籤:Python python-3.x 熊猫 数据框 功能
下一篇:嘗試一個功能,但我不斷收到錯誤
