我有一个pandas df,其中包含一个由以下文本组成的列:
String1::some_text::some_text;String2::some_text::;String3::some_text::some_text;String4::some_text::some_text
我可以看到:
我想创建一个包含以下内容的新列:
String1, String2, String3, String4
全部用逗号分隔,但仍然在同一列中。
如何解决问题?
感谢您的帮助
答案 0 :(得分:1)
试试这个:
In [136]: df.txt.str.findall(r'String\d+').str.join(', ')
Out[136]:
0 String1, String2, String3, String4
Name: txt, dtype: object
数据:
In [137]: df
Out[137]:
txt
0 String1::some_text::some_text;String2::some_text::;String3::some_text::some_text;String4::some_t...
设定:
df = pd.DataFrame({'txt': ['String1::some_text::some_text;String2::some_text::;String3::some_text::some_text;String4::some_text::some_text']})
答案 1 :(得分:0)
考虑使用列df
txt
df = pd.DataFrame(['String1::some_text::some_text;String2::some_text::;String3::some_text::some_text;String4::some_text::some_text'] * 10,
columns=['txt'])
df
使用str.split
和groupby
df.txt.str.split(';', expand=True).stack() \
.str.split('::').str[0].groupby(level=0).apply(list)
0 [String1, String2, String3, String4]
1 [String1, String2, String3, String4]
2 [String1, String2, String3, String4]
3 [String1, String2, String3, String4]
4 [String1, String2, String3, String4]
5 [String1, String2, String3, String4]
6 [String1, String2, String3, String4]
7 [String1, String2, String3, String4]
8 [String1, String2, String3, String4]
9 [String1, String2, String3, String4]
dtype: object
答案 2 :(得分:0)
我只是应用一个lambda函数来执行你想要做的操作(首先在“;”上拆分,然后在“::”上拆分并保留第一个元素,然后将它们连接起来):
df['new_col'] = df['old_col'].apply(lambda s: ", ".join(t.split("::")[0] for t in s.split(";")))
您还可以避免在::
上分割,因为只需在第一个:
足够之前停止:
df['new_col'] = df['old_col'].apply(lambda s: ", ".join(t[:t.index(":")] for t in s.split(";")))