我有一個看起來像這樣的資料框:
i j
0 a b
1 a c
2 b c
我想將它轉換為另一個看起來像這樣的資料框:
a b c
0 1 -1 0
1 1 0 -1
2 0 1 -1
這個想法是查看第一個資料框中的每一行,并將值 1 分配給第一列中的專案,將值 -1 分配給第二列中的專案,并將值 0 分配給新資料框中的所有其他專案。第二個資料幀的行數與第一個資料幀一樣多,列數與第一個資料幀中的唯一條目數一樣多。謝謝你。
無法真正開始這件事。
uj5u.com熱心網友回復:
例子
data = {'i': {0: 'a', 1: 'a', 2: 'b'}, 'j': {0: 'b', 1: 'c', 2: 'c'}}
df = pd.DataFrame(data)
df
i j
0 a b
1 a c
2 b c
首先 做假人
df1 = pd.get_dummies(df)
df1
i_a i_b j_b j_c
0 1 0 1 0
1 1 0 0 1
2 0 1 0 1
二是將df1索引制作成多索引
df1.columns = df1.columns.map(lambda x: tuple(x.split('_')))
df1
i j
a b b c
0 1 0 1 0
1 1 0 0 1
2 0 1 0 1
第三次使j負值
df1.loc[:, 'j'] = df1.loc[:, 'j'].mul(-1).to_numpy()
df1
i j
a b b c
0 1 0 -1 0
1 1 0 0 -1
2 0 1 0 -1
最終總和i&j
df1.sum(level=1 ,axis=1)
a b c
0 1 -1 0
1 1 0 -1
2 0 1 -1
我們可以將多個列作為串列而不是iandj
uj5u.com熱心網友回復:
columns = ['a', 'b', 'c']
def get_order(input_row):
output_row[input_row[i]] = 1
output_row[input_row[j]] = -1
return pd.Series(output_row)
ordering_df = original_df.apply(get_order, axis = 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532876.html
標籤:Python熊猫数据框
