python - Pandas 行迭代查询
问题描述
我有这个虚拟数据集。假设 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
我正在探索 pandas python 的 iterrows 和 isin 方法,但无法提出解决方案。谁能帮我解决这个问题
方法:我正在考虑在 df_2 中查找 df_1 的每一行,如果找到则添加它们。
Pseudo Code
for i,j in df_1.iterrows():
if j isin df_2.columns:
Add
解决方案
这是一个解决方案,为了更清晰,分几个步骤:
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
推荐阅读
- sql-server - 如何在 T-SQL 中插入新行 Char(13)
- c# - 为什么在活动目录组中不能创建为 groupType = Local
- php - 访问 php 对象数组的单个值
- php - 将现有目录复制到新目录后找不到 Laravel 页面
- c# - 移动带有背景图像的矩形时,图像会自行重复,而不是重绘
- javascript - 使用 WebPack 时找不到函数
- flutter - Flutter:向Map添加数据(而不是替换数据)
- javascript - 没有断点/调试器时双重调用 .change() 方法
- jquery - 在多个设备上按需加载,例如移动设备和 ipad pro 和 ipad
- php - 单击注销按钮刷新php中的页面