python - 在 Pandas 中折叠列和索引

标签 python python-3.x pandas numpy dataframe

我正在寻找使用 python3 对 pandas DataFrame 执行特定操作。我想将一个 NxK DataFrame 折叠成一个 NKx3 DataFrame,它由三列组成:条目,列和来自原始 DataFrame 的索引。这是一个例子:

          'a' 'b' 'c'
    'e'    1   2   3
    'f'    4   5   6

期望的输出:

         0   1   2
    0    1  'a' 'e'
    1    4  'a' 'f'
    2    2  'b' 'e'
    3    5  'b' 'f'
    4    3  'c' 'e'
    5    6  'c' 'f'

我正在寻找一种优雅的 pythonic 方式来实现这一目标,但由于我正在处理非常大的数据帧,因此最优先考虑的是效率。

最佳答案

Pandas

使用unstack + reset_index

df.unstack().reset_index()

  level_0 level_1  0
0       a       e  1
1       a       f  4
2       b       e  2
3       b       f  5
4       c       e  3
5       c       f  6

完全复制你所拥有的

df.unstack().rename_axis([1, 2]).reset_index().sort_index(1)

   0  1  2
0  1  a  e
1  4  a  f
2  2  b  e
3  5  b  f
4  3  c  e
5  6  c  f

numpy

v = df.values
pd.DataFrame({
        0: v.ravel('F'),
        1: df.columns.values.repeat(v.shape[0]),
        2: np.tile(df.index.values, v.shape[1])
    })

   0  1  2
0  1  a  e
1  4  a  f
2  2  b  e
3  5  b  f
4  3  c  e
5  6  c  f

关于python - 在 Pandas 中折叠列和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947609/

相关文章:

python - 检索 redis 列表中由 ltrim 修剪的值

python - 编写不会因越界检查而中断的 if 语句的最佳方法是什么?

python-3.x - groupby python 类型错误 : unorderable types: tuple() < str()

python - pandas:合并(连接)多列上的两个数据框

python - 我怎样才能解决下面的这些错误?

python - 在 Pandas 中获取平均年份(多年平均天数)

python - 从手写文本中去除周围的线条和背景图形噪音

python - 如何使用 Python 使用 Github Markdown API

python - 是否可以动态地将一个对象专门化为子类?

python - 使用 Dask DataFrame 和 Pandas 高效读取 Timeseries CSV 数据目录