如何在 Pandas 中解压一系列元组?

新手上路,请多包涵

有时我在使用 Pandas 时会得到一系列元组/列表。例如,在进行分组并传递具有多个返回值的函数时,这很常见:

 import numpy as np
from scipy import stats
df = pd.DataFrame(dict(x=np.random.randn(100),
                       y=np.repeat(list("abcd"), 25)))
out = df.groupby("y").x.apply(stats.ttest_1samp, 0)
print out

y
a       (1.3066417476, 0.203717485506)
b    (0.0801133382517, 0.936811414675)
c      (1.55784329113, 0.132360504653)
d     (0.267999459642, 0.790989680709)
dtype: object

“解压缩”此结构以便获得包含两列的 DataFrame 的正确方法是什么?

一个相关的问题是如何将此结构或生成的数据帧解压缩为两个系列/数组对象。这几乎有效:

 t, p = zip(*out)

但它 t

 (array(1.3066417475999257),
 array(0.08011333825171714),
 array(1.557843291126335),
 array(0.267999459641651))

并且需要采取额外的步骤来挤压它。

原文由 mwaskom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
2 个回答

也许这是最直接的(我猜是最pythonic的):

 out.apply(pd.Series)

如果您想将列重命名为更有意义的名称,那么:

 out.columns=['Kstats','Pvalue']

如果您不想要索引的默认名称:

 out.index.name=None

原文由 Siraj S. 发布,翻译遵循 CC BY-SA 3.0 许可协议

我相信你想要这个:

 df=pd.DataFrame(out.tolist())
df.columns=['KS-stat', 'P-value']

结果:

            KS-stat   P-value
0   -2.12978778869  0.043643
1    3.50655433879  0.001813
2    -1.2221274198  0.233527
3  -0.977154419818  0.338240

原文由 CT Zhu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题