python-3.x - 基于第二个数据帧中的标签对一个数据帧进行分组
问题描述
我有一个 SWOT 表的数据框(实际上是 105k dframes)表示(应该是一个包含字符串的 4x4 网格)。问题在于,并非整个集合 (105k) 中的所有帧都具有相同的形状,并且 SWOT 元素的位置也各不相同。我的方法是创建每个帧的副本,然后在原始帧中查找特定字符串并在副本中添加标签+一些前向填充。
现在我有了原始帧和副本(相同大小、相同索引和相同列名),其中原始帧具有我想要分组的字符串和一个基本上是掩码的副本(不是布尔值 - 而是标签掩码)。
在循环整个集合时,我将原始帧与基于索引的副本合并,并获得一个合并帧,其中包含两个帧的列,并带有 _x 和 _y 后缀。如何将 _y 列中与 _x 列中具有相同标记的字符串连接到新数据帧?
+---+-------+-------------+-------+-------------+-----+-----+
| | 0_x | 0_y | 1_x | 1_y | n_x | n_y |
+---+-------+-------------+-------+-------------+-----+-----+
| 0 | tag_1 | some_string | tag_2 | some_string | | |
| 1 | tag_1 | some_string | tag_2 | some_string | | |
| 2 | tag_2 | some_string | tag_3 | some_string | | |
| n | tag_2 | some_string | tag_3 | some_string | | |
+---+-------+-------------+-------+-------------+-----+-----+
到目前为止,这是我的代码-基本上它可以满足我对列对(n_x,n_y)的要求,但是如果我在更多列中具有相同的标记(例如在 0_x 和 1_x 中),它就不起作用。我可以对列 a 和 b 进行第二次迭代,并与第一种情况相同,但有没有更有效的方法?
df_tmp(包含标签)和 df_orig(包含字符串)
df_merged = pd.merge(df_tmp, df_orig, left_index=True, right_index=True, validate="1:1")
df_merged = df_merged.applymap(str)
columns_list = df_merged.columns.to_list()
x_columns = [elem for elem in columns_list if elem.endswith("x")]
y_columns = [elem for elem in columns_list if elem.endswith("y")]
df_collect = pd.DataFrame()
for col_x, col_y in zip(x_columns, y_columns):
df_final = df_merged.groupby([col_x])[col_y].apply(','.join).reset_index()
df_final = df_final.rename(columns={col_x: 'a', col_y: 'b' })
df_collect = df_collect.append(df_final, ignore_index=True)
解决方案
推荐阅读
- php - 从 wordpress 中删除未使用的样式
- c# - 将 Web 服务调用的结果反序列化到子元素类型
- r - R 中不同研究中失访的估算
- webhooks - 从浏览器将用户令牌添加到 Dialogflow df-messenger
- python - ImportError:无法从部分初始化的模块“covid”导入名称“covid”?
- python - (Python)使用静态方法有什么好处吗?
- excel - 如何计算不同工作表上某些值的行数
- css - text-transform:在 chrome 上包含 ß 中断输入文本的字符串上的大写字母
- visual-studio-code - Visual Studio Code:另一个 Code 实例正在运行但没有响应
- sqlalchemy - 如何解决 sqlalchemy.exc.NoForeignKeysError?