![](/img/trans.png)
[英]How would I loop over a data frame and create a dict that stores the column name as a key and the corresponding row index as a value?
[英]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.add
和np.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 数组,如果rows
和cols
很大,则获得结果的速度比为每个单元格计算col+row
(在 Python 中)更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.