簡體   English   中英

在兩列中獲取具有相同特定單詞的熊貓行

[英]get pandas rows with same specific word in two columns

我有一個看起來像這樣的熊貓數據框

     data1                 data2
0   overall_phase1_b3     overall_phase1_b5
1   overall_phase2_b3     overall_phase5_b5
2   overall_phase3_b3     overall_phase3_b5

我的問題是如何獲得具有匹配階段號的數據框行? 如果我在data1列中有phase1 ,我應該在data2列中有phase1

所需的輸出如下

       data1                 data2
0   overall_phase1_b3     overall_phase1_b5
1   overall_phase3_b3     overall_phase3_b5

您不需要regex來實現這一點。 你可以改用這樣的東西:

df[df.data1.str.split("_", expand=True)[1] == df.data2.str.split("_", expand=True)[1]]


------------------------------------------
    data1               data2
0   overall_phase1_b3   overall_phase1_b5
2   overall_phase3_b3   overall_phase3_b5
------------------------------------------

這基本上是將列data1data2拆分為“_”,然后比較兩列中擴展數據幀的第二個值(包括“phasex”)。 比較為您提供了一個可用於減少數據的掩碼。

由於我們正在處理 Pandas,我將為您提供簡單的答案。

import pandas as pd
df = pd.DataFrame(columns=["data1","data2"])
data1 = ['overall_phase1_b3','overall_phase1_b3','overall_phase3_b3']
data2 = ['overall_phase1_b5','overall_phase5_b5','overall_phase3_b5']
df['data1'] = data1
df['data2'] = data2
df

上面的代碼將為您生成給定數據的 Pandas Dataframe。

result = pd.DataFrame(columns=["data1","data2"])
result_d1 = []
result_d2 = []
for i,j in df.iterrows():
    if j.data1.split('_')[1][-1] == j.data2.split('_')[1][-1]:
        result_d1.append(j.data1)
        result_d2.append(j.data2)
result['data1'] = result_d1
result['data2'] = result_d2
result

查看您的數據后,我們可以使用字符串拆分方法將階段編號與相應的行進行比較,這將告訴您每行之間的匹配階段。 如果您不想將結果存儲在 DataFrame 中,最好使用print語句而不是將結果推送到 DataFrame 中。

不過,很好的問題,快樂的編碼..!

另一種方法但非常相似:

# extract phase numberes and compare
df[df.data1.str.extract('(\d+)')[0]==df.data2.str.extract('(\d+)')[0]]

>>>out
'''
               data1              data2
0  overall_phase1_b3  overall_phase1_b5
2  overall_phase3_b3  overall_phase3_b5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM