繁体   English   中英

创建一个数据框作为行索引值和列名的函数?

[英]create a Data frame as a function of row index value and column name?

根据行索引值和列名创建熊猫数据框的最佳方法是什么?

因此,对于 DataFrame 中 X 中的索引,Y 中的列,每个值将是一些 f(x,y),其中 x 中的 x 和 Y 中的 y(例如,可以是索引和列名的串联)

我知道我可以写一个循环来做到这一点,但认为在 Pandas 中有更快的方法吗?

谢谢!

您可以使用列表理解将值准备为列表列表,然后将列表列表传递给pd.DataFrame

import pandas as pd
rows = ['1','2','3']
cols = ['X','Y']

df = pd.DataFrame(([col+row for col in cols] for row in rows),
                  index=rows, columns=cols)

产量

    X   Y
1  X1  Y1
2  X2  Y2
3  X3  Y3

当然,您可以通过调用任意函数f来替换col+row

df = pd.DataFrame(([f(row, col) for col in cols] for row in rows),
                  index=rows, columns=cols)

如果rows和/或cols较大,则列出的清单可能需要大量的内存。 为每个单元调用f一次可能需要一些时间。 根据f ,可能有一种更快/更少内存密集型的方式来创建df 例如,要连接行和列标签,您可以使用np.char.addnp.meshgrid

import numpy as np
rows = ['1','2','3']
cols = ['X','Y']

df = pd.DataFrame(np.char.add(*np.meshgrid(cols, rows, sparse=True, indexing='xy')), 
                  index=rows, columns=cols)

产生相同的结果。

这将创建 NumPy 数组而不创建列表的临时列表,从而节省内存。 由于np.char.add以矢量化方式创建结果 NumPy 数组,如果rowscols很大,则获得结果的速度比为每个单元格计算col+row (在 Python 中)更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM