pandas 如何根据行的相似性拆分一个嵌套框架?

vcudknz3  于 2023-11-15  发布在  其他
关注(0)|答案(3)|浏览(75)

我有以下数据集:

0      1       2       3
xxx_qsaqx   2      2.2    2.3      2.4
xxx_gtygs   3      3.2    3.3      3.4
xxx_uytgo   4      4.2    4.3      4.4
xxx_ytghr   5      5.2    5.3      5.4
xxy_uyhga   6      6.2    6.3      6.4
xxy-uytei   7      7.2    7.3      7.4
xyy_uiyta   8      8.2    8.3      8.4

字符串
我想把它分成以下三个部分:
xxx-df

0      1       2       3
xxx_qsaqx   2      2.2    2.3      2.4
xxx_gtygs   3      3.2    3.3      3.4
xxx_uytgo   4      4.2    4.3      4.4
xxx_ytghr   5      5.2    5.3      5.4


xxy-df

0      1       2       3
xxy_uyhga   6      6.2    6.3      6.4
xxy-uytei   7      7.2    7.3      7.4


xyy-df

0      1       2       3
xyy_uiyta   8      8.2    8.3      8.4

**注意,字符串实际上是行索引,而0,1,2和3是字符串的列。

wnvonmuf

wnvonmuf1#

不要尝试动态生成变量,this is considered bad practice
相反,使用str.extract的组合来收集字典中的DataFrames以获取前缀,并使用groupby来拆分组:

grouper = df.index.str.extract('^([^-_]+)', expand=False)

dfs = {k: g for k,g in df.groupby(grouper)}

字符串
输出量:

{'xxx':            0    1    2    3
        xxx_qsaqx  2  2.2  2.3  2.4
        xxx_gtygs  3  3.2  3.3  3.4
        xxx_uytgo  4  4.2  4.3  4.4
        xxx_ytghr  5  5.2  5.3  5.4,
 'xxy':            0    1    2    3
        xxy_uyhga  6  6.2  6.3  6.4
        xxy-uytei  7  7.2  7.3  7.4,
 'xyy':            0    1    2    3
        xyy_uiyta  8  8.2  8.3  8.4,
}


并通过以下方式访问子 Dataframe :

dfs['xxx']

           0    1    2    3
xxx_qsaqx  2  2.2  2.3  2.4
xxx_gtygs  3  3.2  3.3  3.4
xxx_uytgo  4  4.2  4.3  4.4
xxx_ytghr  5  5.2  5.3  5.4

ni65a41a

ni65a41a2#

试试这个:

df = pd.DataFrame({0: [2, 3, 4, 5, 6, 7, 8],
                   1: [2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2],
                   2: [2.3, 3.3, 4.3, 5.3, 6.3, 7.3, 8.3],
                   3: [2.4, 3.4, 4.4, 5.4, 6.4, 7.4, 8.4]},
                  index=['xxx_qsaqx', 'xxx_gtygs', 'xxx_uytgo',
                         'xxx_ytghr', 'xxy_uyhga', 'xxy-uytei', 'xyy_uiyta'],
                  )

xxx_df, xxy_df, xyy_df = [x for _, x in df.groupby(df.index.str[:3])]

字符串
输出xxx_df:

0   1   2   3   
xxx_qsaqx   2   2.2 2.3 2.4 
xxx_gtygs   3   3.2 3.3 3.4 
xxx_uytgo   4   4.2 4.3 4.4
xxx_ytghr   5   5.2 5.3 5.4


输出xxy_df:

0   1   2   3
xxy_uyhga   6   6.2 6.3 6.4 
xxy-uytei   7   7.2 7.3 7.4


输出xyy_df:

0   1   2   3   
xyy_uiyta   8   8.2 8.3 8.4

j0pj023g

j0pj023g3#

验证码

for key, df in df.groupby(lambda x: x.split('_')[0]):
    globals()[key + '_df'] = df

字符串
chk变量

print(xxx_df)


产出:

0   1   2   3
xxx_qsaqx   2   2.2 2.3 2.4
xxx_gtygs   3   3.2 3.3 3.4
xxx_uytgo   4   4.2 4.3 4.4
xxx_ytghr   5   5.2 5.3 5.4

相关问题