![](/img/trans.png)
[英]Pandas DataFrame: get rows with same pair of values in two specific columns
[英]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
------------------------------------------
這基本上是將列data1
和data2
拆分為“_”,然后比較兩列中擴展數據幀的第二個值(包括“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.