如何在pandas数据框的子部分上进行操作?

时间:2017-12-05 11:06:49

标签: python pandas dataframe

我有一个简短的表格,例如:

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

我不明白为什么一无所获?

1 个答案:

答案 0 :(得分:1)

我认为您需要删除DataFrame.loc Series.loc而不是chained indexing

[]

为什么您的代码不起作用:

原因称为tutorial modern pandas

如果想要一些,只需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 [...,...] ,然后即可设置。