Python:使用基于嵌套列表中唯一值的列创建 Pandas 数据框

标签 python pandas numpy

我有一个嵌套列表,其中包含每个样本的不同区域。我想制作一个数据框,使每一行(样本)都存在或不存在相应的区域(列)。例如,数据可能如下所示:

region_list = [['North America'], ['North America', 'South America'], ['Asia'], ['North America', 'Asia', 'Australia']]

最后的数据框看起来像这样:

North America    South America     Asia     Australia
1                0                 0        0
1                1                 0        0
0                0                 1        0
1                0                 1        1

我想我可能会想出一种使用嵌套循环和追加的方法,但是是否有更 pythonic 的方法来做到这一点?也许使用 numpy.where

最佳答案

Pandas
str.get_dummies

pd.Series(region_list).str.join('|').str.get_dummies()

   Asia  Australia  North America  South America
0     0          0              1              0
1     0          0              1              1
2     1          0              0              0
3     1          1              1              0

numpy
np.bincountpd.factorize

n = len(region_list)
i = np.arange(n).repeat([len(x) for x in region_list])
f, u = pd.factorize(np.concatenate(region_list))
m = u.size

pd.DataFrame(
    np.bincount(i * m + f, minlength=n * m).reshape(n, m),
    columns=u
)

   North America  South America  Asia  Australia
0              1              0     0          0
1              1              1     0          0
2              0              0     1          0
3              1              0     1          1

时间

%timeit pd.Series(region_list).str.join('|').str.get_dummies()
1000 loops, best of 3: 1.42 ms per loop

%%timeit
n = len(region_list)
i = np.arange(n).repeat([len(x) for x in region_list])
f, u = pd.factorize(np.concatenate(region_list))
m = u.size

pd.DataFrame(
    np.bincount(i * m + f, minlength=n * m).reshape(n, m),
    columns=u
)
1000 loops, best of 3: 204 µs per loop

关于Python:使用基于嵌套列表中唯一值的列创建 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511742/

相关文章:

python - 如何在 Google App Engine 上查找特定于单个 MapReduce 作业的日志?

python - 通过求和降低数组的分辨率

python - pandas 中的多值或多索引数据透视表

python - 我有一组不等长的列表,计算每个列表长度的最快方法是什么

python - 如何合并 2 个 numpy 数组并连接它们的值?

python - 如何使用请求提交具有相同 POST 名称的多个文件?

python - 包含元组的列表列表到列表列表

python - 将 win32com Outlook 附件直接保存到变量

python - Pandas Dataframe - 在字符串中查找字符串的出现

python - 如何在循环过程中将 df 附加到另一个 df