【问题标题】:Flatten a list of list in python & also create differenet dataframes展平python中的列表列表并创建不同的数据框
【发布时间】:2020-04-24 03:38:05
【问题描述】:

我有一个数据

#创建一些带有名称列的数据 data = pd.DataFrame({'Names': ['Joe', 'John', 'Jasper', 'Jez'] *4, 'Add': ['Lo', 'Po', 'Fa',
'It']*4,'Ob1' : np.random.rand(16), 'Ob2' : np.random.rand(16)})

& 使用另一个数据框作为地图创建了一个包含数据子集的列表(仅包含我想要的名称)

import pandas as pd

#Mapping file
data2 = pd.DataFrame({
  "Names": ["Joe", "John"],
   "Add": ["Lo", "Po"]})

tuples = [tuple(x) for x in data2.values]
my_dfs = [data[(data['Names'] == mytuple[0]) & (data['Add'] == mytuple[1])] for mytuple in    
tuples]
for my_df in my_dfs:
    print(my_df)

& 我得到以下输出:

    [ Names Add   Ob1   Ob2
    Joe  Lo 0.999 0.403
    Joe  Lo 0.509 0.570
    Joe  Lo 0.180 0.775
    Joe  Lo 0.010 0.591

    Names Add   Ob1   Ob2
    John  Po 0.040 0.256
    John  Po 0.673 0.869
    John  Po 0.915 0.593
    John  Po 0.865 0.298 ]

"my_dfs" 是列表的列表。有可能吗:

我。通过展平上面的列表以及如何最好地完成来创建数据框。尝试了以下但没有给我正确的输出:

flattened_list = []
for x in my_dfs:
    flattened_list.append(x)  

最终输出的位置:

   Names Add   Ob1   Ob2
    Joe  Lo 0.999 0.403
    Joe  Lo 0.509 0.570
    Joe  Lo 0.180 0.775
    Joe  Lo 0.010 0.591
    John  Po 0.040 0.256
    John  Po 0.673 0.869
    John  Po 0.915 0.593
    John  Po 0.865 0.298

标题不会出现两次

二。创建不同的数据帧(在本例中为 2 个数据帧,一个用于 Joe,另一个用于 John。

Joe:

Names Add   Ob1   Ob2
    Joe  Lo 0.999 0.403
    Joe  Lo 0.509 0.570
    Joe  Lo 0.180 0.775
    Joe  Lo 0.010 0.591

John:   

    Names Add   Ob1   Ob2
    John  Po 0.040 0.256
    John  Po 0.673 0.869
    John  Po 0.915 0.593
    John  Po 0.865 0.298

有人可以帮忙吗?

【问题讨论】:

    标签: python list dataframe flatten


    【解决方案1】:

    您应该能够使用pandas concat function 来组合您的数据框。

    如果你更喜欢使用 python 列表,你想使用列表extend 函数,而不是append

    flattened_list = []
    for x in my_dfs:
        flattened_list.extend(x)
    

    extend 将列表的元素添加到您的列表中,而 append 只会将列表本身添加到您的 flattened_list 列表中(您可以阅读更多信息 here

    另请注意,您的列表似乎包含标题,因此如果您只想要值,您可以使用 python x[n:] 仅获取元素 after n:

    flattened_list = []
    for x in my_dfs:
        flattened_list.extend(x[1:])
    

    【讨论】:

    • 谢谢,但我只得到标题,而我只想要一个标题和所有值。 flattened_list = [] for x in my_dfs: flattened_list.extend(x[1:]) flattened_list ['Names', 'Add', 'Ob1', 'Ob2', 'Names', 'Add', 'Ob1', ' Ob2']
    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 2019-03-08
    • 2019-05-12
    • 1970-01-01
    • 2023-01-19
    • 2014-10-15
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多