繁体   English   中英

来自 df 的嵌套列表构造

[英]Nested list construction from df

我有一个这样的df。

df=pd.DataFrame({'Number':[1,2,3,4,5, 6, 7, 8, 9, 10, 11],
             'Name':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L'],
             'Value': [223, 124, 434, 514, 821, 110, 321, 211, 764, 123, 131]})

在我的现实世界问题中,df 有不同的长度,我需要将它们转换为具有特定特征的嵌套列表,以便能够为 pdf 创建表。 我需要一个嵌套列表,其中一个列表代表表中的一行。 在这种情况下,我希望表格有四行。 我想从 df 将四行(df 行)添加到一个表行。 但是如果 df 更大,那么我将不得不增加列表(表行)的数量和进入一个表行的 df 行的数量。

# Expected output
[[1, 'A', 223, 5, 'E', 821, 9, 'I', 764],
 [2, 'B', 124, 6, 'F', 110, 10, 'K', 123],
 [3, 'C', 434, 7, 'G', 321, 11, 'L', 131],
 [4, 'D', 514, 8, 'H', 211]]

该列表可以这样创建。 但我当然会寻找更自动化的解决方案。

lst=[]

# Row 1
l1=df.iloc[0].tolist()
l2=df.iloc[4].tolist()
l3=df.iloc[8].tolist()
l1.extend(l2)
l1.extend(l3)
lst.append(l1)

# Row 2
l1=df.iloc[1].tolist()
l2=df.iloc[5].tolist()
l3=df.iloc[9].tolist()
l1.extend(l2)
l1.extend(l3)
lst.append(l1)

#Row 3
l1=df.iloc[2].tolist()
l2=df.iloc[6].tolist()
l3=df.iloc[10].tolist()
l1.extend(l2)
l1.extend(l3)
lst.append(l1)

#Row 4
l1=df.iloc[3].tolist()
l2=df.iloc[7].tolist()
l1.extend(l2)
lst.append(l1)

这个怎么样?

import pandas as pd
df = pd.DataFrame({'Number': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
                   'Name': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L'],
                   'Value': [223, 124, 434, 514, 821, 110, 321, 211, 764, 123, 131]})

df_list = df.values.tolist()
no_rows = 4
res = []
for i in range(no_rows):
    res.append([num for sublist in df_list[i::no_rows] for num in sublist])
res

Output:

>>>  [[1, 'A', 223, 5, 'E', 821, 9, 'I', 764],
      [2, 'B', 124, 6, 'F', 110, 10, 'K', 123],
      [3, 'C', 434, 7, 'G', 321, 11, 'L', 131],
      [4, 'D', 514, 8, 'H', 211]]

我使用 defaultdict 能够扩展列表。 请在此处阅读有关 defaultdict 的信息: https://docs.python.org/3/library/collections.html#collections.defaultdict

import pandas as pd
from collections import defaultdict


def nested_list(df, rows):
    lst = df.values.tolist()
    new_lst = defaultdict(list)
    for i, ele in enumerate(lst):
        new_lst[i%rows].extend(ele)
    return list( new_lst.values() )

df=pd.DataFrame({'Number':[1,2,3,4,5, 6, 7, 8, 9, 10, 11],
             'Name':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L'],
             'Value': [223, 124, 434, 514, 821, 110, 321, 211, 764, 123, 131]})


lst = nested_list(df, rows=4)

'''
>>> lst
[[1, 'A', 223, 5, 'E', 821, 9, 'I', 764],
 [2, 'B', 124, 6, 'F', 110, 10, 'K', 123],
 [3, 'C', 434, 7, 'G', 321, 11, 'L', 131],
 [4, 'D', 514, 8, 'H', 211]]
 '''

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM