給一個 df 作為
index x_1 x_2 x_3 x_4 x_5
0 50 60 70 30 20
1 10 20 30 40 50
2 10 20 20 20 20
我有一個映射,將每一行映射到 df 中的相應列。
映射df是
index x_1 x_2 x_3 x_4 x_5
0 1 3 4 1 2
1 2 2 2 3 5
2 4 1 1 5 2
我想創建一個映射的df
期望的輸出
index x_1 x_2 x_3 x_4 x_5
0 50 70 30 50 60
1 20 20 20 30 50
2 20 10 20 20 20
uj5u.com熱心網友回復:
您可以使用第二個資料幀行作為第一個資料幀行的索引。
import pandas as pd
df = pd.DataFrame([[50, 60, 70, 30, 20],
[10, 20, 30, 40, 50],
[10, 20, 20, 20, 20]])
map_df = pd.DataFrame([[1, 3, 4, 1, 2],
[2, 2, 2, 3, 5],
[4, 1, 1, 5, 2]])
for i in range(df.shape[0]):
df.iloc[i] = df.iloc[i][map_df.iloc[i] - 1]
print(df)
結果:
0 1 2 3 4
0 50 70 30 50 60
1 20 20 20 30 50
2 20 10 10 20 20
編輯:
沒有回圈的解決方案:
df.join(map, rsuffix='map').apply(lambda row: pd.Series(np.array(row[:5])[row[5:] - 1]).transpose(), axis=1)
uj5u.com熱心網友回復:
讓我們做一些transpose replacehack
mapping_df.astype(str).radd('x_').T.replace(df.T).T
x_1 x_2 x_3 x_4 x_5
index
0 50 70 30 50 60
1 20 20 20 30 50
2 20 10 10 20 20
uj5u.com熱心網友回復:
游戲遲到但使用 numpy 的替代方法?
import pandas as pd
import numpy as np
df = pd.DataFrame([[50, 60, 70, 30, 20],
[10, 20, 30, 40, 50],
[10, 20, 20, 20, 20]])
map_df = pd.DataFrame([[1, 3, 4, 1, 2],
[2, 2, 2, 3, 5],
[4, 1, 1, 5, 2]])
np.take_along_axis(np.array(df),np.array(map_df)-1,1)
array([[50, 70, 30, 50, 60],
[20, 20, 20, 30, 50],
[20, 10, 10, 20, 20]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513801.html
標籤:Python熊猫
上一篇:兩列的比較
