【发布时间】:2020-05-03 13:24:12
【问题描述】:
我的目标是将下表折叠成一列,这个问题专门处理下面的蓝色行。该表有 3 个分类变量和 6 个分析/定量变量。列 C1 和 C2 是唯一需要匹配才能成功连接的变量。所有空白单元格都是 NaN,下面是用于复制的 python 代码。这些行是独立导出的,因为它们具有在其他相关表中找到的信息,而不是包含在导出中。
问题。 (蓝色)蓝色行中的一些定量信息也在灰色行中,有些不是。有没有办法将新信息(Q6 中的 -8)复制到灰色行,然后删除/突出显示蓝色行?此处,假设 drop_duplicates 的 keep='first' 默认值处于活动状态,则保留灰色行分类信息。
相关问题。(黄色行)How to delete rows that are not exact duplicates but contain no new information (more NaN)
数据表
预期输出
预期输出将使用蓝色行中的 Q6 更新灰色行,并移除蓝色行。
[['C1 (PK)', 'C2 (FK)', 'C3', 'C4', 'Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6']
['S1','P3','H1',Timestamp('2004-12-04 00:00:00'),-15.0,-27.4,nan,-10.0,-15.0,-8]]
目前进展
我当前的代码包括这一行以删除所有定量变量均为 NaN 的所有行。df.dropna(subset=df.columns[4:],how='all', inplace=True)
此外,此行用于删除所有定量变量相同的所有行。 df.drop_duplicates(subset=df.columns[4:], inplace=True)
可以复制到 IDE 中的示例代码。
import pandas as pd
df = [['S1','P3','H1',Timestamp('2004-12-04 00:00:00'),-15.0,-27.4,nan,-10.0,-15.0,nan],
['S1','P3','H1',Timestamp('2004-12-20 00:00:00'),nan,nan,nan,nan,nan,nan],
['S1','P3','H2',Timestamp('2004-12-20 00:00:00'),-15.0,nan,nan,-10.0,nan,nan],
['S1','P3','H3',Timestamp('2004-12-07 00:00:00'),nan,nan,nan,nan,-15.0,-8.0],
['S1','P3','H1', Timestamp('2004-12-04 00:00:00'), -15.0,-27.4,nan,-10.0, -15.0, nan]]
cols = ['C1 (PK)', 'C2 (FK)', 'C3', 'C4', 'Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6']
pd.DataFrame(data=df,columns=cols)
df.drop_duplicates(inplace=True)
df.dropna(subset=df.columns[4:],how='all', inplace=True)
df.drop_duplicates(subset=df.columns[4:], inplace=True)
【问题讨论】:
-
如果匹配只需要 C1 和 C2,我不清楚为什么这个输入不会折叠成单行,或者为什么只有第 4 行会被删除。跨度>
-
你能发布你的预期输出吗?
-
@ALollz,我已经更新了这个问题。这篇 SO 帖子专门针对蓝色列提出的问题。由于不属于导出的其他链接表中的信息,某些行是独立导出的。
-
我明白,只是没有任何关于如何选择蓝色和灰色行的信息,唯一的选择是硬编码你正在用缺失的第 3 行更新第 0 行,然后丢弃第三个。
-
@ALollz 问题已更新。保留灰色行分类信息是因为我假设 pd.drop_duplicates 的 keep='first' 默认值。
标签: python pandas join merge drop-duplicates