如何在Python中創建一個雙向表?我在數據集中有2個分類變量,並希望通過創建一個雙向表來查看這兩個變量之間的關係。謝謝。如何在Python中創建一個雙向表?
回答
假設您不必進行任何插值,則可以使用字典。使用(x, y)
元組作爲鍵,無論你的值是什麼值。舉例來說,一個簡單的2x2的表是這樣的:
___0___1___
0 | 0 0.5
1 | 0.5 1
看起來像這樣的代碼:
two_way_lookup = {
(0, 0) : 0,
(0, 1) : 0.5,
(1, 0) : 0.5,
(1, 1) : 1
}
print(two_way_lookup.get((0, 1))) # prints 0.5
這看起來並不像實際迴應問題。 – Marcin
Dicts只提供一種查找方式,OP要求提供雙向表格。 –
@Marcin(&Ashwini)我理解「雙向表」意思是「你在查找'x'和'y'的表格,以得到一個代表這些元素組合的值。至少在我看來,它與2向查找不同,它可以在任何方向上使用鍵/值對。 「 –
大概在標準庫中的最佳解決方案,如果你的數據是中等大,是使用sqlite
,該內存數據庫:http://docs.python.org/2/library/sqlite3.html
有一個bidict package:
>>> from bidict import bidict
>>> husbands2wives = bidict({'john': 'jackie'})
>>> husbands2wives['john'] # the forward mapping is just like with dict
'jackie'
>>> husbands2wives[:'jackie'] # use slice for the inverse mapping
'john'
您可以使用安裝pip install bidict。
編輯:爲了您的實際問題 - 如果我理解正確的話 - 我會用pandas
:
# data.csv
Gender Height GPA HS GPA Seat WtFeel Cheat
Female 64 2.60 2.63 M AboutRt No 1
Male 69 2.70 3.72 M AboutRt No 2
Female 66 3.00 3.44 F AboutRt No 3
Female 63 3.11 2.73 F AboutRt No 4
Male 72 3.40 2.35 B OverWt No 0
In [1]: import pandas as pd
In [2]: df = pd.read_csv('data.csv', sep = '\s')
In [3]: grouped = df.groupby(['Gender', 'Seat'])
In [4]: grouped.size()
Out[4]:
Gender Seat
Female AboutRt 3
Male AboutRt 1
OverWt 1
dtype: int64
您可以創建類似兩級字典(即,包含兩個以相反順序映射相同數據的字典的字典:
>>> mappings=[(0, 6), (1, 7), (2, 8), (3, 9), (4, 10)]
>>> view = dict(view1=dict(mappings), view2=dict(reversed(k) for k in mappings))
>>> view
{'view2': {8: 2, 9: 3, 10: 4, 6: 0, 7: 1},
'view1': {0: 6, 1: 7, 2: 8, 3: 9, 4: 10}}
這適用於一對一的功能,但當您不假設這種情況時會有點棘手。例如:x = 4,y =( - 2,2)。 – dckrooney
您或許可以使用DoubleDict
,如Python Cookbook上的recipe 578224所示。
如果你想有一個家庭自釀,靠不住的解決方案,你可以做這樣的事情:
import collections
class BDMap:
def __init__(self):
self.x_table = {}
self.y_table = {}
def get(self, x = None, y = None):
if (x != None) and (y != None):
y_vals = self.x_table[x]
if (y in y_vals):
return (x, y)
elif x != None:
return self.x_table[x]
elif y != None:
return self.y_table[y]
def set(self, x, y):
if isinstance(x, collections.Hashable) and isinstance(y, collections.Hashable):
self.x_table[x] = self.x_table.get(x, list()) + [y]
self.y_table[y] = self.y_table.get(y, list()) + [x]
else:
raise TypeError("unhashable type")
對於除一次性腳本之外的任何一個小的數據集,你無疑是更好與提到的方法之一,雖然:)
- 1. 如何創建一個空的雙向鏈表?
- 2. 如何創建一個雙打數組中的雙打列表
- 3. 在C++中創建雙向鏈表
- 4. 如何在Python中創建一個CFuncType
- 5. 如何在python中創建一個強制方向圖?
- 6. 如何在Grails中正確創建多個一對一的雙向關係?
- 7. 在sqlite3中創建一個表python
- 8. 我如何在Python中的列表中創建一個集合?
- 9. 如何在Rcpp中創建一個向量列表?
- 10. 創建一個雙向分佈在列向量中等於總和在Matlab中
- 11. 如何動態地在雙向電力創建打字稿表
- 12. 創建一個雙向鏈表,但不能打印出結果
- 13. 如何在Python中使用變量名創建一個mysql表?
- 14. 如何在python中創建一箇舊的dicts列表?
- 15. 如何編寫一個方法來在python中創建sqlite表
- 16. 讀入文件並在c中創建一個雙向鏈表c
- 17. 如何從Python中的列表創建一個循環列表?
- 18. 如何在Twisted/Python中使用AMP創建雙向消息傳遞
- 19. 流利的NHibernate:如何創建一對一的雙向映射?
- 20. 雙向連接列表創建節點
- 21. 在Python中添加空雙向鏈表
- 22. 創建一個雙列橫向和縱向滾動的活動
- 23. 如何在Python中創建比較表
- 24. 如何在python中創建表格?
- 25. 如何在Python中創建一個給定的元素列表來創建另一個列表?
- 26. Python中創建一個列表
- 27. 如何在R中創建雙向直方圖?
- 28. 如何在Prolog中創建雙向謂詞?
- 29. 如何在JUNG中創建雙向圖的投影
- 30. 如何使用JSON在angularjs中創建雙向綁定?
可能重複http://stackoverflow.com/questions/6129693/python-creating-a-table –
你的意思是一個雙向映射? – brice
你可以給我們一個樣本數據集? – rickcnagy