numpy 逐行分解数据框并将分解值存储在新数据框中

kadbb459  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(147)

我有下面的代码。
我想通过'outlierdataframe' Dataframe 一行一行分解'x'和'y'列中的值
对于每一个分解的行,我想将这个分解的行存储为它自己的** Dataframe ,具有列'newID','x'和'y'
但是,下面的代码
打印一列中的所有内容而不是打印一列中展开的“x”值**,打印另一列中展开的“y”值
我会非常感激你的帮助!

individualframe = outlierdataframe.iloc[0]
individualoutliers = individualframe.explode(list('xy'))
newframe = pd.DataFrame(individualoutliers)
print(newframe)

离群 Dataframe 第一行:

索引离群 Dataframe 的第一行:
第一次

nc1teljy

nc1teljy1#

您可以将pandas.DataFrame.applypandas.Series.explode配合使用,以分解选定的(list)列(例如xy)。
试试这个:

out = (
        df
          .loc[:, ["newID", "x", "y"]]
          .apply(lambda x: pd.Series(x).explode())
      )
#输出:
print(out)

    newID    x    y
0  610020  100   60
0  610020   55   60
0  610020   55   60
0  610020   60   60
0  610020   60   65
0  610020   60   65
0  610020   65   70
0  610020   70   70
0  610020   70   75
0  610020   75   75
0  610020   80   80

如果需要为每个组分配一个 Dataframe (模式名称为df_newID),请使用以下命令:

for k, g in out.groupby("newID"):
    globals()['df_' + str(k)] = g
    
print(df_610020, type(df_610020))

    newID    x    y
0  610020  100   60
0  610020   55   60
0  610020   55   60
0  610020   60   60
0  610020   60   65
0  610020   60   65
0  610020   65   70
0  610020   70   70
0  610020   70   75
0  610020   75   75
0  610020   80   80 <class 'pandas.core.frame.DataFrame'>
toiithl6

toiithl62#

以下解决方案有效:

individualframe = outlierdataframe.iloc[0]
individualoutliers1 = individualframe[['x']].explode('x')
individualoutliers2 = individualframe[['y']].explode('y')
newIDs = individualframe[['newID']][0]
individualoutliers1 = pd.DataFrame(individualoutliers1)
individualoutliers2 = pd.DataFrame(individualoutliers2)
data = [individualoutliers1,individualoutliers2]
newframe = pd.concat(data,axis=1)
newframe = newframe.rename(columns={newframe.columns.values[0]:'x',newframe.columns.values[1]:'y'})
newframe['newID'] = newIDs 
print(newframe)

Output exceeds the size limit. Open the full output data in a text editor
      y    y   newID
0    55   60  610020
1    55   60  610020
2    55   60  610020
3    60   60  610020
4    60   65  610020
5    60   65  610020
6    65   70  610020

相关问题