pandas - 在原始数据框旁边显示应用结果

pandas - show results of apply next to original dataframe

我有一个 pandas DataFrame,然后我将一个函数应用于一堆列,并得到一个新的结果列。然后我希望能够使用原始列值检查新列的结果。

  a  b
0 0  0
1 0  1
2 1  0
3 1  1

我想要一个不改变原始 df 的单行代码 return 这个(假设我正在应用 xor 函数):

  a  b xor
0 0  0 0
1 0  1 1
2 1  0 1
3 1  1 0

我现在做的是(我在 shell 工作,所以第二行打印 'df'):

df['result'] = df.apply(xor, axis=1)
df

(foo 得到一个 'row' 并且假设它对所有列都做了一些事情,所以我不是针对特定于列的东西,最后我想看到所有原始列和他们旁边的结果列)。

我不喜欢这个选项,因为它是两步并且更改原始数据框。我的目标是一次又一次地检查函数,所以我希望能够在原始值旁边显示结果。

是否有一种简单的 1 步直接方法?

谢谢,

这应该可以解决问题:

pd.concat([df,df.apply(foo,axis=1)],axis=1)

此函数用于并排显示两个数据结构。您需要创建第二个数据框或系列,或者可能使用:

side_by_side(df1, df1.apply(foo))

用于韦斯·麦金尼的 presentation

def side_by_side(*objs, **kwds):
    from pandas.core.common import adjoin
    space = kwds.get('space', 4)
    reprs = [repr(obj).split('\n') for obj in objs]
    print adjoin(space, *reprs)

用法示例:

df1 = pd.DataFrame(np.random.rand(10,3))
df2 = pd.DataFrame(np.random.rand(10,3))


side_by_side(df1, df2)
          0         1         2              0         1         2
0  0.424040  0.264855  0.025566    0  0.708604  0.306784  0.645058
1  0.932507  0.522241  0.915979    1  0.839926  0.911550  0.152661
2  0.291583  0.318066  0.242179    2  0.085973  0.522005  0.960857
3  0.953090  0.126239  0.161788    3  0.481225  0.093825  0.191482
4  0.739598  0.834832  0.583147    4  0.053519  0.954738  0.846373
5  0.633130  0.740508  0.335575    5  0.281024  0.244012  0.661398
6  0.158822  0.399715  0.890146    6  0.842356  0.090806  0.562401
7  0.864191  0.917889  0.715713    7  0.011725  0.274691  0.729003
8  0.139880  0.662035  0.943423    8  0.105924  0.405305  0.140807
9  0.544886  0.577185  0.623016    9  0.192138  0.558908  0.633519