我有一个 Pandas DataFrame,其中有一列如下:
索引 | ID | Value_1 |
---|---|---|
1 | 1 | 123 |
2 | 2 | 543;735;926 |
3 | 3 | 64;235 |
4 | 4 | 7643 |
有没有办法建立这样的列:
索引 | ID | Value_2 |
---|---|---|
1 | 1 | 123 |
2 | 2 | 543 |
3 | 2 | 735 |
4 | 2 | 926 |
5 | 3 | 64 |
6 | 3 | 235 |
7 | 4 | 7643 |
先谢谢你!
答案 0 :(得分:2)
试试str.explode
import pandas as pd
df = pd.DataFrame([[1,'123'], [2, '543;735;926'], [3, '64;235'], [4, '7643']], columns=['ID', 'Value_1'])
df['Value_1'] = df['Value_1'].str.split(';')
df.explode('Value_1')
ID Value_1
0 1 123
1 2 543
1 2 735
1 2 926
2 3 64
2 3 235
3 4 7643
答案 1 :(得分:0)
只需在 split
和 ;
上explode
:
df['Value_1'].str.split(';').explode()
输出:
0 123
1 543
1 735
1 926
2 64
2 235
3 7643
Name: Value_1, dtype: object
答案 2 :(得分:0)
我假设您的输入列数据都是字符串。 在这种情况下,您可以拆分每个字符串并链接结果迭代器
import itertools
def split_column(column, sep: str = ";"):
return itertools.chain.from_iterable(
map(lambda s: s.split(sep), column)
)
这应该复制您的示例请求
import pandas as pd
import itertools
ds = pd.DataFrame(data={
"Value_1": [
"123",
"543;735;926",
"64;235",
"7643"
]
})
def split_column(column, sep: str = ";"):
return itertools.chain.from_iterable(
map(lambda s: s.split(sep), column)
)
ds2 = pd.DataFrame(data={"Value_2": split_column(ds["Value_1"])})
如果我打印 ds
我得到
Value_1
0 123
1 543;735;926
2 64;235
3 7643
如果我打印 ds2
我得到
Value_2
0 123
1 543
2 735
3 926
4 64
5 235
6 7643