如何使用分隔符将数据帧单元格拆分为不同的数据帧。有条件

查克·彼得

关于同一主题还有其他问题,它们有所帮助,但我有一个额外的转折。

我有一个在每个(但不是全部)单元格中有多个值的数据框。

df = pd.DataFrame({'a':["10-30-410","20-40-500","25-50"], 'b':["5-8-9","4", "99"]})
指数 一种
0 10-30-410 5-8-9
1 20-40-500 4
2 25-50 99

如何通过破折号“-”拆分每个单元格并创建三个新数据框?请注意,并非所有单元格都有多个值,在这种情况下,第二个和第三个数据帧将变为 NA 或空白(将它们视为字符串)。

所以我需要 df1 成为这些值中的第一个:

指数 一种
0 10 5
1 20 4
2 25 99

而 df2 将是:

指数 一种
0 30 8
1 40
2 50

对于 df3 也是如此:

指数 一种
0 410 9
1 500
2

我用这个得到了 df1

df1 = df.replace(r'(\d+).*(\d+).*(\d+)+', r'\1', regex=True)

但是 df2 不太好用。我得到了第二个值,还有 4 和 99,它们应该是空白的。

df2 = df.replace(r'(\d+)-(\d+).*', r'\2', regex=True)
指数 一种
0 30 8
1 40 4 - 应该是空白
2 50 99 - 应该是空白

这是正确的方法吗?我很擅长正则表达式,但对组很模糊。谢谢你。

亨利·埃克

使用str.split+ concat+stack获取数据更可用的格式:

new_df = pd.concat(
    (df['a'].str.split('-', expand=True),
     df['b'].str.split('-', expand=True)),
    keys=('a', 'b'),
    axis=1
).stack(dropna=False).droplevel(0)

new_df

      a     b
0    10     5
1    30     8
2   410     9
0    20     4
1    40  None
2   500  None
0    25    99
1    50  None
2  None  None

ncols 的可扩展选项

cols = ['a', 'b']
new_df = pd.concat(
    (df[c].str.split('-', expand=True) for c in cols),
    keys=cols,
    axis=1
).stack(dropna=False).droplevel(0)

然后groupby级别 0 +reset_index创建数据框列表:

dfs = [g.reset_index(drop=True) for _, g in new_df.groupby(level=0)]

dfs

[    a   b
0  10   5
1  20   4
2  25  99,
     a     b
0  30     8
1  40  None
2  50  None,
       a     b
0   410     9
1   500  None
2  None  None]

完整的工作示例:

import pandas as pd

df = pd.DataFrame({
    'a': ["10-30-410", "20-40-500", "25-50"],
    'b': ["5-8-9", "4", "99"]
})

cols = ['a', 'b']
new_df = pd.concat(
    (df[c].str.split('-', expand=True) for c in cols),
    keys=cols,
    axis=1
).stack(dropna=False).droplevel(0)

dfs = [g.reset_index(drop=True) for _, g in new_df.groupby(level=0)]

print(dfs)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从数据帧中删除有条件行

如何使用熊猫有条件地分隔单元格值并将其添加到列

使用行值作为分隔符将Spark数据帧分为多个块

如何在r中有条件地拆分数据帧?

有条件地复制数据帧中的行

使用分隔符将数据框中的一列拆分为多列(不同长度)

R-如何从有条件的数据帧中创建数据帧?

如何有条件地将数据帧行附加到上方

如何将逗号分隔的数据帧单元格中的值转换为Julia中的数组?

有没有一种方法可以使用换行分隔符将文本从单元格拆分为多个记录,在SQL中?

如何使用GScript将单个单元格中的逗号分隔值拆分为Google工作表中的不同列?

根据单元格中的值(R!)有条件地将数据帧按行拆分

根据另一个数据帧有条件地替换数据帧中的单元

R:如何根据单元格中的值将数据帧中的行拆分为多行?

将分隔的字符串拆分为R数据帧中的不同列

如何将单元格中的数据拆分为 Excel 上的现有列?

如何用“.”分隔字符串 使用 dplyr 作为数据帧中的分隔符

如何应用从不同数据帧获取数据并具有条件的函数?

Python:使用带有 locals 函数的 for 循环将数据帧拆分为多个数据帧

在条件下将大数据帧拆分为多个

有条件地将数据附加到 Pandas 数据帧

NatTable - 在单元格内使用行分隔符复制和粘贴单元格数据

从不同大小的数据帧复制数据,有条件

如果满足条件,如何将数据帧行拆分为多个数据帧行?

数据帧熊猫的每个单元格的逗号分隔

R 将具有不同分隔符出现的列名称拆分为字符串,并将唯一的字符串/字符串计数分配给新的数据帧

使用 numpy 进行条件向量化,如何将列表添加到数据帧单元格

如何有条件地从 2 个数据帧中删除数据帧的前 N 行

使用循环有条件地将“NA”行添加到数据帧列表中