我們有如下資料
Name value1 Value2 finallist
0 cosmos 10 20 [10,20]
1 network 30 40 [30,40]
2 unab 20 40 [20,40]
有什么辦法可以在所有行之間做區別
最終輸出像
Name value1 Value2 finallist cosmos network unab
0 cosmos 10 20 [10,20] 0 40 30
1 network 30 40 [30,40] 40 0 10
2 unab 20 40 [20,40] 30 10 0
資料有不同型別的名稱,每個名稱應該是一列
uj5u.com熱心網友回復:
您需要每行的值總和的成對絕對差。最簡單的可能是使用底層的 numpy 陣列。
“值”列之和的絕對差
# get sum of values per row and convert to numpy array
a = df['value1'].filter(regex='(?i)value').sum(1).to_numpy()
# compute the pairwise difference, create a DataFrame and join
df2 = df.join(pd.DataFrame(abs(a-a[:,None]), columns=df['Name'], index=df.index))
輸出:
Name value1 Value2 finallist cosmos network unab
0 cosmos 10 20 [10, 20] 0 40 30
1 network 30 40 [30, 40] 40 0 10
2 unab 20 40 [20, 40] 30 10 0
uj5u.com熱心網友回復:
我不太確定您希望如何計算列中的值,所以我只取了 value1 的差值,但這與本例中的問題無關。我會這樣做:
for name in df['name']:
vals = []
for idx, row in df.iterrows():
vals.append(int(df.loc[df['name'] == name].value1) - row.value1)
df[name] = vals
因此,對于您要為其創建列的每個名稱,您都需要計算差異,將其添加到串列中,然后將該串列用作新命名列的列值。
這是一個快速修復,可能有更好的方法,但我希望這會有所幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471442.html
