数据框到 frozenset
dataframe to frozenset
我想将数据帧转换为冻结集并将数据帧列保留在冻结集中。
例子
x=pd.DataFrame(data=dict(sample=["A","B","C"],lane=[1,1,2]))
>>> x
lane sample
0 1 A
1 1 B
2 2 C
我想要这样的东西:
x2= {frozenset({("sample", "A"), ("lane", 1)}),
frozenset({("sample", "B"), ("lane", 1)}),
frozenset({("sample", "C"), ("lane", 2)})}
>>> x2
{frozenset({('sample', 'B'), ('lane', 1)}), frozenset({('sample', 'A'), ('lane', 1)}), frozenset({('lane', 2), ('sample', 'C')})}
我试过 x.apply(frozenset,1)
但它给了我:
0 (1, A)
1 (1, B)
2 (C, 2)
dtype: object
任何帮助都会有用。
谢谢
您可以使用 pd.DataFrame.to_dict
:
将数据框转换为您需要的 records
格式
x.to_dict('records')
# [{'sample': 'A', 'lane': 1},
# {'sample': 'B', 'lane': 1},
# {'sample': 'C', 'lane': 2}]
由于这会生成一个列表,因此您可以将 frozenset
映射到列表,如下所示:
# using abbreviation 'r' instead of 'records'
map(lambda y: frozenset(y.iteritems()), x.to_dict('r'))
# [frozenset([('sample', 'A'), ('lane', 1)]),
# frozenset([('sample', 'B'), ('lane', 1)]),
# frozenset([('sample', 'C'), ('lane', 2)])]
或者,如果您的输出应该是一组冻结集,则使用集合理解:
{frozenset(y.iteritems()) for y in x.to_dict('records')}
# set([frozenset([('sample', 'C'), ('lane', 2)]),
# frozenset([('sample', 'B'), ('lane', 1)]),
# frozenset([('sample', 'A'), ('lane', 1)])])
我想将数据帧转换为冻结集并将数据帧列保留在冻结集中。
例子
x=pd.DataFrame(data=dict(sample=["A","B","C"],lane=[1,1,2]))
>>> x
lane sample
0 1 A
1 1 B
2 2 C
我想要这样的东西:
x2= {frozenset({("sample", "A"), ("lane", 1)}),
frozenset({("sample", "B"), ("lane", 1)}),
frozenset({("sample", "C"), ("lane", 2)})}
>>> x2
{frozenset({('sample', 'B'), ('lane', 1)}), frozenset({('sample', 'A'), ('lane', 1)}), frozenset({('lane', 2), ('sample', 'C')})}
我试过 x.apply(frozenset,1)
但它给了我:
0 (1, A)
1 (1, B)
2 (C, 2)
dtype: object
任何帮助都会有用。 谢谢
您可以使用 pd.DataFrame.to_dict
:
records
格式
x.to_dict('records')
# [{'sample': 'A', 'lane': 1},
# {'sample': 'B', 'lane': 1},
# {'sample': 'C', 'lane': 2}]
由于这会生成一个列表,因此您可以将 frozenset
映射到列表,如下所示:
# using abbreviation 'r' instead of 'records'
map(lambda y: frozenset(y.iteritems()), x.to_dict('r'))
# [frozenset([('sample', 'A'), ('lane', 1)]),
# frozenset([('sample', 'B'), ('lane', 1)]),
# frozenset([('sample', 'C'), ('lane', 2)])]
或者,如果您的输出应该是一组冻结集,则使用集合理解:
{frozenset(y.iteritems()) for y in x.to_dict('records')}
# set([frozenset([('sample', 'C'), ('lane', 2)]),
# frozenset([('sample', 'B'), ('lane', 1)]),
# frozenset([('sample', 'A'), ('lane', 1)])])