我需要计算数据框中一个静态列与构成数据帧其余部分的一些可变数量列之间的差异。
我的数据如下:
School District | 01-01-2017 | 01-02-2017 |...| 02-01-2017 | BaseData |
District A | 1 | 5 |...| 3 | 1 |
District B | 2 | 4 |...| 3 | 2 |
District C | 3 | 3 |...| 3 | 3 |
District D | 4 | 2 |...| 3 | 4 |
我想从每个其他列中减去“BaseData”,其中的日期使得最终表格如下所示:
School District | 01-01-2017 | 01-02-2017 |...| 02-01-2017 | BaseData |
District A | 0 | -4 |...| -2 | 0 |
District B | 0 | -2 |...| -1 | 0 |
District C | 0 | 0 |...| 0 | 0 |
District D | 0 | 2 |...| 1 | 0 |
“学区”和“基础数据”之间的列数是可变的。我尝试使用finaltable = basetable[[1:-1]].sub(basetable['BaseData'], axis=0)
,但似乎[1:-1]
不起作用(引发语法错误)。我知道我可以使用[1, 2, 3, etc.]
返回任意数量的预选列,但表中的日期是动态的,可能有任意数量。
答案 0 :(得分:1)
我认为你需要iloc
来选择位置:
df.iloc[:, 1:] = df.iloc[:, 1:].sub(df['BaseData'], axis=0)
print (df)
School District 01-01-2017 01-02-2017 02-01-2017 BaseData
0 District A 0 4 2 0
1 District B 0 2 1 0
2 District C 0 0 0 0
3 District D 0 -2 -1 0
或者:
df.iloc[:, 1:-1] = df.iloc[:, 1:-1].sub(df['BaseData'], axis=0)
print (df)
School District 01-01-2017 01-02-2017 02-01-2017 BaseData
0 District A 0 4 2 1
1 District B 0 2 1 2
2 District C 0 0 0 3
3 District D 0 -2 -1 4
答案 1 :(得分:0)
我在发布后不久通过一个有点无关的问题找到了这个答案:
使用.columns()修饰符:
finaltable = basetable[basetable.columns[1:]].sub(basetable['BaseData'], axis=0)