Python-列表的pandas列,为每个列表元素创建一行

Python-列表的pandas列,为每个列表元素创建一行,第1张

Python-列表的pandas列,为每个列表元素创建一行
lst_col = 'samples'r = pd.Dataframe({      col:np.repeat(df[col].values, df[lst_col].str.len())      for col in df.columns.drop(lst_col)}    ).assign(**{lst_col:np.concatenate(df[lst_col].values)})[df.columns]

结果:

In [103]: rOut[103]:    samples  subject  trial_num0      0.10        1          11     -0.20        1          12      0.05        1          13      0.25        1          24      1.32        1          25     -0.17        1          26      0.64        1          37     -0.22        1          38     -0.71        1          39     -0.03        2          110    -0.65        2          111     0.76        2          112     1.77        2          213     0.89        2          214     0.65        2          215    -0.98        2          316     0.65        2          317    -0.30        2          3

PS 在这里你可能会发现一些通用的解决方案

更新:一些解释:IMO了解此代码的最简单方法是尝试逐步执行它:

在下一行中,我们将在一列N时间内重复值,其中

N
-是相应列表的长度:

In [10]: np.repeat(df['trial_num'].values, df[lst_col].str.len())Out[10]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3], dtype=int64)

可以对所有包含标量值的列进行概括:

In [11]: pd.Dataframe({    ...:col:np.repeat(df[col].values, df[lst_col].str.len())    ...:for col in df.columns.drop(lst_col)}    ...:         )Out[11]:    trial_num  subject01        111        121        132        142        152        163        1..        ...      ...11          1        212          2        213          2        214          2        215          3        216          3        217          3        2[18 rows x 2 columns]

使用np.concatenate()我们可以展平列list(samples)中的所有值并获得一维向量:

In [12]: np.concatenate(df[lst_col].values)Out[12]: array([-1.04, -0.58, -1.32,  0.82, -0.59, -0.34,  0.25,  2.09,  0.12,  0.83, -0.88,  0.68,  0.55, -0.56,  0.65, -0.04,  0.36, -0.31])

将所有这些放在一起:

In [13]: pd.Dataframe({    ...:col:np.repeat(df[col].values, df[lst_col].str.len())    ...:for col in df.columns.drop(lst_col)}    ...:         ).assign(**{lst_col:np.concatenate(df[lst_col].values)})Out[13]:    trial_num  subject  samples01        1    -1.0411        1    -0.5821        1    -1.3232        1     0.8242        1    -0.5952        1    -0.3463        1     0.25..        ...      ...      ...11          1        2     0.6812          2        2     0.5513          2        2    -0.5614          2        2     0.6515          3        2    -0.0416          3        2     0.3617          3        2    -0.31[18 rows x 3 columns]

使用

pd.Dataframe()[df.columns]
将确保我们按原始顺序选择列…



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5108185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存