【发布时间】:2021-08-28 05:28:16
【问题描述】:
在@Joe Ferndz 的帮助下进行的早期讨论: merging varying number of rows and columns by multiple conditions in python
数据集的样子
connector type q_text a_text var1
1 1111 1 aaaa None xxxx
2 9999 2 None tttt jjjj
3 1111 2 None uuuu None
4 9999 1 bbbb None yyyy
5 9999 1 cccc None zzzz
逻辑将每一行与type = 1 合并到其对应的(connector 中的相同值)type = 2。执行此操作的代码:
df.loc[df['type'] == 2, 'var1.1'] = df['var1']
my_cols = ['q_text','a_text','var1']
df[my_cols] = df.sort_values(['connector','type']).groupby('connector')[my_cols].transform(lambda x: x.bfill())
df.dropna(subset=['q_text'], inplace=True)
df.reset_index(drop=True,inplace=True)
数据集的样子
connector q_text a_text var1 var1.1
1 1111 aaaa uuuu xxxx None
2 9999 bbbb tttt yyyy jjjj
3 9999 cccc None zzzz zzzz
问题,多行具有type = 1,但只有一行具有type = 2(connector 值相同)。因此我最终需要多次合并type = 2 行。
问题为什么只合并一行?
数据集应该是什么样子(比较第 3 行的值,你会明白我的意思)
connector q_text a_text var1 var1.1
1 1111 aaaa uuuu xxxx None
2 9999 bbbb tttt yyyy jjjj
3 9999 cccc tttt zzzz jjjj
a_text 遵循左连接逻辑,可以在不添加额外列的情况下覆盖值。相反,var1 值对于行连接器值是非排他性的,这就是为什么我希望为这些值 (jjjj) 提供额外的列 (var1.1)。有些行具有唯一的 connector 值,永远不会被合并,但我想保留它们。
【问题讨论】:
-
复制您的示例数据集,然后运行您的代码/逻辑不会生成您在上面(
how the dataset then looks like部分)中显示的数据集 -
对于类型 2,
q_text总是 None,对于类型 1 行,a_textalways None? -
是的,
q_text对于type = 2行始终为 None,a_text对于type = 1行始终为 None。我不小心subset=['a_text']而不是q_text并现在编辑它。 -
好吧,不确定你的逻辑,但你想要的可以使用 pandas 中的合并操作来完成。发布了一个答案来向您展示这一点。
标签: python-3.x pandas merge iteration