0
作爲行索引值和列名稱的函數,創建熊貓數據框的最佳方法是什麼?創建一個數據框作爲行索引值和列名的函數?
所以對於數據幀,其中在X索引,列在Y,每個值將是一些F(X,Y),其中x在X和Y在Y(例如可以是索引和列名的串聯)
我知道我可以寫一個循環來做到這一點,但是熊貓有更快的方法嗎?
謝謝!
作爲行索引值和列名稱的函數,創建熊貓數據框的最佳方法是什麼?創建一個數據框作爲行索引值和列名的函數?
所以對於數據幀,其中在X索引,列在Y,每個值將是一些F(X,Y),其中x在X和Y在Y(例如可以是索引和列名的串聯)
我知道我可以寫一個循環來做到這一點,但是熊貓有更快的方法嗎?
謝謝!
你可以用一個列表理解爲一個列表的列表準備的值,然後列出清單傳遞給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
,當然你可以通過調用任意函數代替col+row
f
:
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)更快。
謝謝這是有幫助的。我沒有嘗試進行字符串連接 - f(x,y)將調用difflib來查看x和y字符串的相似程度。我基本上是通過擺脫那些可能是重複的東西來清理一長串名字。所以我想問題是調用外部函數的最有效方法是什麼? –