为一系列列Pandas分割字符串

时间:2019-07-01 12:44:44

标签: pandas

如何为下面的Pandas数据框的多列拆分字符串以列出每一列?

col1           col2
0/1:9,12:21:99 0/1:9,12:22:99
0/1:9,12:23:99 0/1:9,15:24:99

所需的输出:

col1               col2
[0/1,[9,12],21,99] [0/1,[9,12],22,99]
[0/1,[9,12],23,99] [0/1,[9,15],24,99]

我可以做到:

df['col1'].str.split(":", n = -1, expand = True)
df['col2'].str.split(":", n = -1, expand = True)

但是我有很多专栏,我想知道是否可以以一种更自动化的方式来做到这一点?

然后,我想为每一行计算每个列表的第二个元素的平均值,即第一行的平均值为21和22,第二行的平均值为23和24。

1 个答案:

答案 0 :(得分:1)

如果数据像您的样本一样,则可以使用stack

new_df = (df.iloc[:,0:2]
            .stack()
            .str.split(':',expand=True)
         )

然后new_df被双索引:

          0     1   2   3
0 col1  0/1  9,12  21  99
  col2  0/1  9,12  22  99
1 col1  0/1  9,12  23  99
  col2  0/1  9,15  24  99

并说出您是否想要第二个数字的均值:

new_df[2].unstack(level=-1).astype(float).mean(axis=1)

给予:

0    21.5
1    23.5
dtype: float64