簡體   English   中英

在整個數據框中查找第一列元素並返回每行前面的第一列值(熊貓)

[英]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.

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