繁体   English   中英

从 Pandas 中的数据帧列表创建新的数据帧

[英]Create new Dataframes from a list of Dataframes in Pandas

我在列表中有几个数据框

df1 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], 'col2': [3, 4, 3, 8, 4, 5], 'col3': ['cat', 'cat', 'cat', 'cat', 'cat', 'cat']}
df2 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], 'col2': [30, 40, 30, 80, 40, 50], 'col3': ['dog', 'dog', 'dog', 'dog', 'dog', 'dog']}
df3 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], 'col2': [31, 41, 31, 81, 41, 51], 'col3': ['whale', 'whale', 'whale', 'whale', 'whale', 'whale']}

dfList = [df1, df2, df3]

我想要的是一个数据框列表,其中col1中每个值的每个新 dataframe , col2col3作为列。 col2col3的值应该来自每个 dataframe df1 , df2 , df3

     a
col2    col3
3       cat
30      dog
31      whale

     a
col2    col3
4       cat
40      dog
41      whale

     b
col2    col3
3       cat
30      dog
31      whale

     c
col2    col3
8       cat
80      dog
81      whale

....

如果有可能在一个 dataframe 中包含它,我也会感兴趣,比如

    col2     col3
a   3        cat
    30       dog
    31       whale
a   4        cat
    40       dog
    41       whale
b   3        cat
    30       dog
    31       whale
c   8        cat
    80       dog
    81       whale
....

您可以使用concatgroupby

df = (pd.concat(dfList)
        .assign(id=lambda d: d.groupby(['col1', 'col3']).cumcount())
      )

out = [d.drop(columns='id') for k,d in df.groupby(['col1', 'id'])]

output:

[  col1  col2   col3
 0    a     3    cat
 0    a    30    dog
 0    a    31  whale,
   col1  col2   col3
 1    a     4    cat
 1    a    40    dog
 1    a    41  whale,
   col1  col2   col3
 2    b     3    cat
 2    b    30    dog
 2    b    31  whale,
   col1  col2   col3
 3    c     8    cat
 3    c    80    dog
 3    c    81  whale,
   col1  col2   col3
 4    c     4    cat
 4    c    40    dog
 4    c    41  whale,
   col1  col2   col3
 5    d     5    cat
 5    d    50    dog
 5    d    51  whale]

选择:

df.set_index(['col1', 'id']).sort_index()

output:

         col2   col3
col1 id             
a    0      3    cat
     0     30    dog
     0     31  whale
     1      4    cat
     1     40    dog
     1     41  whale
b    0      3    cat
     0     30    dog
     0     31  whale
c    0      8    cat
     0     80    dog
     0     81  whale
     1      4    cat
     1     40    dog
     1     41  whale
d    0      5    cat
     0     50    dog
     0     51  whale

暂无
暂无

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

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