将零填充到 Python 列表
Posted
技术标签:
【中文标题】将零填充到 Python 列表【英文标题】:Pad zeros to a Python list 【发布时间】:2021-03-11 06:34:14 【问题描述】:我有一个如下的数据框:
df=
year|text|value
2001|text1|10
2001|text2|11
2002|text2|12
2003|text3|56
2005|text8|8
2005|text1|23
现在,我想从数据框中创建一个列表列表,如下所示:
l1=[[[10,0,0,23],[0,12,0,0],[0,0,56,0],[0,0,0,8]],[text1,text2,text3,text8],[2001,2002,2003,2005]]
当特定年份的文本没有值时,我想在列表中添加零。
我尝试了以下代码:
for value in list(df['text'].values):
df1=df[df['text']==value]
series_list.append(list(df1['value'].values))
names_list.append(value)
year_list.append(list(df1['year'].values))
我没有得到预期的输出。我最初尝试制作 3 个单独的列表。
【问题讨论】:
【参考方案1】:将前两列转换为 MultiIndex。通过取消堆叠一级索引来构建一个矩形矩阵。提取值并将它们排列到一个列表中。
matrix = df.set_index(['text', 'year']).unstack(fill_value=0)
matrix.values.tolist()
#[[10, 0, 0, 23], [11, 12, 0, 0], [0, 0, 56, 0], [0, 0, 0, 8]]
如有必要,添加索引和列:
matrix.values.tolist() + [matrix.index.tolist()] \
+ [matrix.columns.levels[1].tolist()]
#[[10, 0, 0, 23], [11, 12, 0, 0], [0, 0, 56, 0], [0, 0, 0, 8],
# ['text1', 'text2', 'text3', 'text8'], [2001, 2002, 2003, 2005]]
【讨论】:
我还希望保留年份的顺序@DYZ 更新了答案。变化很明显。 将代码更新如下并正常工作。[matrix.values.tolist()]+[matrix.index.tolist()]+[matrix.columns.levels[1].tolist()]
。它不适用于 tocolumns,因为它是多级列 @DYZ
同意,等级选择是必须的。以上是关于将零填充到 Python 列表的主要内容,如果未能解决你的问题,请参考以下文章