【发布时间】:2016-11-05 12:26:32
【问题描述】:
所以我有很多带有 3 列分类变量的 pandas 数据框:
D F False
T F False
D F False
T F False
第一列和第二列可以采用三个值之一。第三个是二进制。所以总共有 18 行可能的行(并非所有组合都可以在每个数据帧上表示)。
我想为每一行分配一个数字 1-18,以便为具有相同因素组合的行分配相同的数字,反之亦然(无哈希冲突)。
在 pandas 中最有效的方法是什么?
所以,all_combination_df 是一个包含所有可能因素组合的 df。我正在尝试将诸如 big_df 之类的 df 转换为其中包含唯一数字的系列
import pandas, itertools
def expand_grid(data_dict):
"""Create a dataframe from every combination of given values."""
rows = itertools.product(*data_dict.values())
return pandas.DataFrame.from_records(rows, columns=data_dict.keys())
all_combination_df = expand_grid(
{'variable_1': ['D', 'A', 'T'],
'variable_2': ['C', 'A', 'B'],
'variable_3' : [True, False]})
big_df = pandas.concat([all_combination_df, all_combination_df, all_combination_df])
【问题讨论】:
-
pandas.DataFrame.to_dict()如果您首先找到唯一行(删除重复项),则应该这样做。 -
@P-robot:这是问题的一个重要方面。查找唯一的行和 dict() 会花费太多时间(数据很大,而且是成块的)。我知道有 18 种可能的组合。有没有办法使用这些信息?
-
好的。我懂了。也许您可以创建一个包含 18 种可能组合的字典,然后将这些组合映射到数据?
-
@P-robot:有趣,如何将字典映射到数据框?
-
我在下面编辑了我的答案,以说明如何使用
map。
标签: python pandas hash dataframe