熊猫行迭代查询

时间:2020-07-15 15:30:52

标签: python pandas dataframe

我有这个虚拟数据集。假设df_1

Column  x   y
AAA    20   30
BBB    10   50
CCC    60   80
DDD    90   100
PQR    30   40
RST    50   60
UVW    30   40
LMN    20   30

接下来是另一个数据集。假设这个df_2。我必须查找(df_1)列,并查看df_2中的映射。就像CCC和DDD是配对的。 PQR,RST和UVW已配对。

Index   0   1   2
1      AAA      
2      BBB      
3      CCC  DDD 
4      XYZ      
5      PQR  RST UVW

这是所需的输出。假设这个df_output

Ouput         x      y
AAA           20    30
BBB           10    50
CCC+DDD       150   180
PQR+RST+UVW   110   140
LMN           20    30

我正在探索熊猫python的迭代和isin方法,但是无法提出解决方案。有人可以帮我吗

方法:我正在考虑在df_2中进行df_1查找的每一行,如果找到则添加它们。

Pseudo Code
for i,j in df_1.iterrows():
    if j isin df_2.columns:
       Add

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,只需几个步骤即可更清楚:

t = df2.melt(id_vars="Index").dropna()
x_y = pd.merge(t, df1, left_on="value", right_on="Column").groupby("Index").sum()

names = pd.DataFrame(df2.drop("Index", axis=1).stack()).reset_index().groupby("level_0")[0].apply(lambda x: " ".join(x))
names = df2.melt(id_vars="Index").dropna().groupby("Index")["value"].apply(lambda x: " ".join(x))

df1_only = pd.merge(df1, t, left_on="Column", right_on = "value", how = "left", indicator=True)
df1_only = df1_only[df1_only._merge == "left_only"]
df1_only = df1_only[["Column", "x", "y"]].rename(columns = {"Column": "value"})

res = pd.concat([names, x_y], axis=1)
res = pd.concat([res, df1_only], axis = 0)
res = res.dropna()

Output: 

         value      x      y
1          AAA   20.0   30.0
2          BBB   10.0   50.0
3      CCC DDD  150.0  180.0
5  PQR RST UVW  110.0  140.0
7          LMN   20.0   30.0