![](/img/trans.png)
[英]Python using pandas search entry just in the first column return values of entire row
[英]find first column elements in entire data frame and return first column values in front of each row(Pandas)
我有下面的源數據框,需要將第一列(A)中的每個元素與B到E列匹配,如果找到它們,則返回第一列中的單元格值和新列(F)中的匹配行[在相關的前面列 (A) 中的元素,以逗號分隔。 例如,A 列中的“a”在 B 到 E 列中重復 4 次,列 (A)['b','c','d','e'] 中的相關值在新列中返回 (F )。 我通過 VBA excel 中的 for 循環來執行此操作,但將其轉換為 python 對我來說很棘手。 感謝您的支持。
源數據框:
A B C D E
a -
b a
c a
d b a -
e d b a -
所需的數據框:
A B C D E F
a - b,c,d,e
b a d,e
c a
d b a - e
e d b a -
下面是我到目前為止寫的代碼,但最后一行在列(F)中返回一個系列
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'},
'B': {0: '-', 1: 'a', 2: 'a', 3: 'b', 4: 'd'}})
df['C'] = np.where(df['B'].isin(df['A'].values), df['B'], np.nan)
df['C'] = df['C'].map(dict(zip(df.A.values, df.B.values)))
df['D'] = np.where(df['C'].isin(df['B'].values), df['C'], np.nan)
df['D'] = df['D'].map(dict(zip(df.B.values, df['C'].values)))
df['E'] = np.where(df['D'].isin(df['C'].values), df['D'], np.nan)
df['E'] = df['E'].map(dict(zip(df['C'].values, df['D'].values)))
df1=df.iloc[:,1:5]
df['F']=[np.where(df1.values == x) for x in df['A']]
我從未使用過 pandas。 我也想看看其他的 np 解決方案。
import pandas as pd
import numpy as np
from IPython.display import display
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'},
'B': {0: '-', 1: 'a', 2: 'a', 3: 'b', 4: 'd'}})
df['C'] = np.where(df['B'].isin(df['A'].values), df['B'], np.nan)
df['C'] = df['C'].map(dict(zip(df.A.values, df.B.values)))
df['D'] = np.where(df['C'].isin(df['B'].values), df['C'], np.nan)
df['D'] = df['D'].map(dict(zip(df.B.values, df['C'].values)))
df['E'] = np.where(df['D'].isin(df['C'].values), df['D'], np.nan)
df['E'] = df['E'].map(dict(zip(df['C'].values, df['D'].values)))
df1=df.iloc[:,1:5]
# -->
df['F']=(t:=[np.where(df1.values == x) for x in df['A']])
f = []
my_data= df.to_dict()
for row in [vals[0].tolist() for vals in t]:
temp = []
for x in row:
temp.append(my_data["A"][x])
f.append(",".join(temp))
df['F'] = f
display(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.