我有这个虚拟数据集。假设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
答案 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