我有一个简短的表格,例如:
In [36]: df = pd.DataFrame({k: pd.np.random.random(4) for k in "ms"}, index=["A", "AH", "B", "BH"])
In [37]: df
Out[37]:
m s
A 0.266581 0.386802
AH 0.626642 0.657029
B 0.643837 0.629465
BH 0.297297 0.766521
在m列中,只有m,我想从A中减去两个第一行,从B中减去最后两行。例如:A - A,A - AH,B - B,B - BH
例如我可以这样做:
In [38]: df.loc[["A", "AH"]]["m"] - df.loc["A"]["m"]
Out[38]:
A 0.000000
AH 0.360061
Name: m, dtype: float64
但如果我试着在桌子上这样做,我就没有成功:
In [39]: df2 = df.copy()
In [44]: df2.loc[["A", "AH"]]["m"] = df.loc[["A", "AH"]]["m"] - df.loc["A"]["m"]
In [45]: df2
Out[45]:
m s
A 0.266581 0.386802
AH 0.626642 0.657029
B 0.643837 0.629465
BH 0.297297 0.766521
我不明白为什么一无所获?
答案 0 :(得分:1)
我认为您需要删除DataFrame.loc
Series.loc
而不是chained indexing
:
[]
为什么您的代码不起作用:
如果想要一些,只需print (df.loc[["A", "AH"], "m"] - df.loc["A", "m"])
A 0.000000
AH -0.696391
Name: m, dtype: float64
df.loc[["A", "AH"], "m"] = df.loc[["A", "AH"], "m"] - df.loc["A", "m"]
df.loc[["B", "BH"], "m"] = df.loc[["B", "BH"], "m"] - df.loc["B", "m"]
print (df)
m s
A 0.000000 0.992226
AH -0.696391 0.465135
B 0.000000 0.611135
BH 0.448778 0.569463
intro Tom Augspurger
中{{1}}的{{1}}进行统治:
粗略的规则是,只要你看到背靠背的方括号,] [,你就是在寻找麻烦。将其替换为 .loc [...,...] ,然后即可设置。