如果在串列中找到重復行需要幫助。
- 如果在串列增量計數中找到值
- 如果找到多個實體,則通過遞增計數重復該行
東風
data = {'First_Name':['Tom', 'Nick', 'Daniel', 'Jack'],
'oter_col':['other_value1', 'other_value2', 'other_value3', 'other_value4']}
df = pd.DataFrame(data)
df["repeation"] = 0
DF看起來像
First_Name oter_col count
0 Tom other_value1 0
1 Nick other_value2 0
2 Daniel other_value3 0
3 Jack other_value4 0
輸入串列:
Full_Name = ["Tom Cruise", "Tom Holland", "Tom Hardy", "Jack black", "Chris Hemsworth"]
需要輸出如:
First_Name Full_Name oter_col count
0 Tom Tom Cruise other_value1 1
1 Tom Tom Holland other_value1 2
2 Tom Tom Hardy other_value1 3
3 Jack Jack black other_value4 1
4 Nick other_value2 1
5 Daniel other_value3 0
嘗試過這樣的事情來獲得第一個匹配索引,所以我可以重復該行但不知道該怎么做。
for name in Full_Name:
m = df.First_Name.str.contains(name.split()[0])
first_index_found = m.idxmax() if m.any() else None
if type(first_index_found) == int:
print(first_index_found)
uj5u.com熱心網友回復:
您可以制作一個 DataFramemerge并按組計算非 NA 名稱cumsum:
df2 = (pd.DataFrame({'Full_Name': Full_Name})
.assign(First_Name=lambda d: d['Full_Name'].str.extract('(\w )'))
)
(df
.merge(df2, on='First_Name', how='left')
.assign(repeation=lambda d: d['Full_Name'].notna().groupby(d['First_Name']).cumsum())
)
輸出:
First_Name oter_col repeation Full_Name
0 Tom other_value1 1 Tom Cruise
1 Tom other_value1 2 Tom Holland
2 Tom other_value1 3 Tom Hardy
3 Nick other_value2 0 NaN
4 Daniel other_value3 0 NaN
5 Jack other_value4 1 Jack black
uj5u.com熱心網友回復:
您可以使用:
# Create a regex pattern to extract First_Name from Full_Name
pat = fr"\b({'|'.join(df['First_Name'])})\b"
# Create a dataframe from Full_Name
df1 = pd.DataFrame({'Full_Name': Full_Name})
df1['First_Name'] = df1['Full_Name'].str.extract(pat)
# Merge them on First_Name column
out = df.merge(df1, on='First_Name', how='left')
# Count (choose one)
out['repeation'] = out.groupby('First_Name').cumcount().add(1)
# OR
out['repeation2'] = (out.dropna().groupby('First_Name').cumcount().add(1)
.reindex(out.index, fill_value=0))
輸出:
>>> out
First_Name oter_col repeation Full_Name repeation2
0 Tom other_value1 1 Tom Cruise 1
1 Tom other_value1 2 Tom Holland 2
2 Tom other_value1 3 Tom Hardy 3
3 Nick other_value2 1 NaN 0
4 Daniel other_value3 1 NaN 0
5 Jack other_value4 1 Jack black 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/486600.html
