python - 多项条件数据调整

标签 python pandas dataframe

我有一个像这样的 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 的总计(即 1​​02.0)小于 100,则取 100 - T1 内的总计值并将该值添加到最大值。如果 T1 大于 100,则取 T1 的总值,用 100 减去它,然后从 T1 内的最大值减去该值。我也想对 T2T3 的总数做同样的事情。基本上每列的总数应为 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/

相关文章:

python - 按列排序并使用 pandas 附加计数器

r - 根据外部标准计算一行中的条目数

python - 在 Windows 中通过 pycparser 包含假 header ?

python - 在 selenium 远程节点上运行 chrome 时出错

python - 如果它包含 pandas 数据框中基于字典键的子字符串,则替换整个字符串

python - Pandas 数据框的简单数据透视表

python - Windows错误: [Error 267] The directory name is invalid

python - 字典的键可以是类的实例吗?

python-3.x - 具有互补零的 Pandas 标志行

scala - 如何在scala中将元组列表转换为数据框