我有一个pandas DataFrame,然后我将一个函数应用于一堆列,我得到一个新的结果列。然后我希望能够使用原始列值检查新列的结果。
a b
0 0 0
1 0 1
2 1 0
3 1 1
我想要一个不改变原始df的单行将返回这个(假设我正在应用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',让我们说它对所有列做了一些事情,所以我不是针对列特定的,最后我想看到所有原始列和结果列旁边它们)。
我不喜欢这个选项,因为它是两步修改原始数据帧。我的目标是一次又一次地检查函数,所以我希望能够在原始值旁边显示结果。
有一个简单的一步到位的方法吗?
谢谢,
答案 0 :(得分:2)
这应该可以解决问题:
pd.concat([df,df.apply(foo,axis=1)],axis=1)
答案 1 :(得分:1)
此功能用于并排显示两个数据结构。您需要创建第二个数据框或系列,或者可能使用:
side_by_side(df1, df1.apply(foo))
用于Wes McKinney的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