gpt4 book ai didi

python - 来自锯齿状数组的 DataFrame

转载 作者:行者123 更新时间:2023-11-28 22:35:18 25 4
gpt4 key购买 nike

我有一个如下所示的数据集:

date = ['01/01/2001','02/01/2001']
countries = [['US', 'UK', 'AU'],['CN']]

所以基本上数据应该是这样的:

def flatten(array):
return sum(array,[])
pd.DataFrame({'date': flatten([[date[0]]*3, [date[1]]]), 'country': flatten(countries)})
# Which Returns:
country date
0 US 01/01/2001
1 UK 01/01/2001
2 AU 01/01/2001
3 CN 02/01/2001

以上似乎是一种低效的实现方式。 datecountries 数组的长度完全相同。基本上 date 需要重复子数组的长度。

在 Pandas 中有一种优雅的方式来做到这一点吗?或者我是否需要像我所做的那样对数组进行预处理?

最佳答案

试试我的 1-liner:

df = pd.DataFrame(list(chain(*[list(product([x],y)) for x, y in zip(date, countries)])), columns= ['date',"countries"])

解释:

基本上itertools在这种情况下,以更 Python 的方式解决问题是一个完美的选择:

from itertools import chain, product
df = pd.DataFrame(list(chain(*[list(product([x],y)) for x, y in zip(date, countries)])), columns= ['date',"countries"])

df
Out[56]:
date countries
0 01/01/2001 US
1 01/01/2001 UK
2 01/01/2001 AU
3 02/01/2001 CN

更新:

更详细的解释:

  • 第一步:使用列表理解,zipitertools.product将两者product输入列表:
    [list(product([x],y)) for x, y in zip(date, countries)]
    输出[59]:
    [[('01/01/2001', '美国'), ('01/01/2001', '英国'), ('01/01/2001', 'AU')],
    [('02/01/2001', 'CN')]]

  • 第 2 步:使用 itertools.chain() 解压/展平list of lists
    列表(链(*[列表(产品([x],y))对于 x,y 在 zip(日期,国家)]))
    输出[60]:
    [('01/01/2001', '美国'),
    ('01/01/2001', '英国'),
    ('01/01/2001', 'AU'),
    ('02/01/2001', 'CN')]

  • 第 3 步:形成 DataFrame:
    df = pd.DataFrame(list(chain(*[list(product([x],y)) for x, y in zip(date, countries)])), columns= ['date',"countries"])

关于python - 来自锯齿状数组的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com