![](/img/trans.png)
[英]Pandas Dataframe replace part of string with value from another column
[英]How to take part of string value from column in DataFrame in Python Pandas?
我在 Python Pandas 中有 DataFrame,如下所示(“col1”是字符串數據類型):
col1
-------
ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K
ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C
ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2
...
我需要創建新列“col2”,其中只有“GROUP:”和“|”之間的值來自“col1”中的值,因此我需要以下內容:
col1 | col2
--------------------------------------------|-------
ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K | gr1
ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C | gr2
ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2 | gpk22
... | ...
如何在 Python Pandas 中做到這一點?
您可以使用正則表達式來提取它。 類似於在 GROUP 之后捕獲所有內容:直到 |
df['col2'] = df.col1.str.extract('GROUP:(.*)\|')
如果您不熟悉正則表達式,則另一個不太優雅但可能更直觀的選擇。
在 pipe 上拆分,從最后一個項目中取出第二個,拆分:並從中取出最后一個元素。 這當然只有在您的 col1 值的結構始終遵循相同格式時才有效。
df.col1.str.split('|').str[-2].str.split(':').str[-1]
Output
col1 col2
0 ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K gr1
1 ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C gr2
2 ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2 gpk22
更優雅的方法是通過正則表達式,但這是我的兩分錢:
d.col1.str.split('GROUP:').apply(lambda x: x[1].split('|')[0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.