我有一个像这样的 df:
Species Status T1 T2 T3
0 Kentucky L 96.0 88.0 79.0
1 Eupesu L 0.0 2.0 3.0
2 Serrated L 1.0 4.0 2.0
3 Smooth_Brome L 2.0 0.0 1.0
4 U1 L 3.0 6.0 10.0
Total 102.0 100.0 95.0
我想编写一个语句或函数,表示如果 T1
的总计(即 102.0)小于 100,则取 100 - T1
内的总计值并将该值添加到最大值。如果 T1
大于 100,则取 T1
的总值,用 100 减去它,然后从 T1
内的最大值减去该值。我也想对 T2
和 T3
的总数做同样的事情。基本上每列的总数应为 100。
我一直在尝试用这段代码来做到这一点:
if df.T1.Total < 100:
df.T1.max()=(100-df.T1.Total)+df.T1.max()
if df.T1.Total > 100:
df.T1.max()= df.T1.max()-(df.T1.Total-100)
if df.T2.Total < 100:
df.T2.max()=(100-df.T2.Total)+df.T2.max()
if df.T2.Total > 100:
df.T2.max()=df.T2.max()-(df.T2.Total-100)
if df.T3.Total < 100:
df.T3.max()=(100-df.T3.Total)+df.T3.max()
if df.T3.Total > 100:
df.T3.max()=df.T3.max()-(df.T3.Total-100)
df.loc['Total']=df.sum()
print df
我想要的输出是这样的:
Species Status T1 T2 T3
0 Kentucky L 94.0 88.0 84.0
1 Eupesu L 0.0 2.0 3.0
2 Serrated L 1.0 4.0 2.0
3 Smooth_Brome L 2.0 0.0 1.0
4 U1 L 3.0 6.0 10.0
Total 100.0 100.0 100.0
该代码返回:
SyntaxError: can't assign to function call
而且我很确定首先有更好的方法来做到这一点。
最佳答案
调整这些值的方法如下:
df = df.drop('Total').set_index(['Species', 'Status']) # recreating 'Total' and leaving only numerical columns
difference = 100 - df.sum() # adjustment values
for col, index in df.idxmax().items(): # works also if max() occurs in different rows
df.loc[index, col] += difference[col] # adjusting each max value
获取:
Species Status
Kentucky L 94.0 88.0 84.0
Eupesu L 0.0 2.0 3.0
Serrated L 1.0 4.0 2.0
Smooth_Brome L 2.0 0.0 1.0
U1 L 3.0 6.0 10.0
这样:
result = pd.concat([df.reset_index(), df.sum().to_frame().T]).fillna('')
result.index = result.index.tolist()[:-1] + ['Total']
产量:
Species Status T1 T2 T3
0 Kentucky L 94.0 88.0 84.0
1 Eupesu L 0.0 2.0 3.0
2 Serrated L 1.0 4.0 2.0
3 Smooth_Brome L 2.0 0.0 1.0
4 U1 L 3.0 6.0 10.0
Total 100.0 100.0 100.0
关于python - 多项条件数据调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37800594/