这是我认为会更容易的事情,但是(对我来说)不是。。。
我有一些数据如下:
data = pd.DataFrame({
'column1' : [0, 49, 50, 0, 100],
'column2' : [100, 0, 0, 0, 0],
'column3' : [0, 51, 50, 100, 0]
})
我的需求的输出最好如下所示:
(0,100,0
49,0,51
50,0,50
0,0,100
100,0,0)
我需要修复这些值,因为没有一个为零,所有行的总和为一。(第1栏+第2栏+第3栏= 100)例如:
(1,98,1
49,1,50
49,1,50
1,1,98
98,1,1)
我考虑过一些可以识别最大或最小列的函数,例如np.maximum()或np.minimum(),但我无法解决第0行,第3行或第4行的情况。感激..
import pandas as pd
data = pd.DataFrame({
'column1' : [0, 49, 50, 0, 100],
'column2' : [100, 0, 0, 0, 0],
'column3' : [0, 51, 50, 100, 0]
})
for row in data.values: #data.values gets all rows of the df
to_minus = list(row).count(0) #Get num of 0, subtract from max(row)
for i in range(len(row)):
elem = row[i]
if elem == 0: #If elem is 0 add 1 to elem
row[i] += 1
else:
if row[i] == max(row): # If elem is max(row) subtract num of 0
row[i] -= to_minus
to_minus = 0 # Set to minus to 0 in case of duplicates
print(data)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句