Hel*_*rth 4 python duplicates dataframe python-3.x pandas
我有一个数据框,看起来像:
df_pairs
128.437 128.437 121.639 5100.9 5029.08 5029.08 4888.81 4888.81 0 0 0 0 0 0
129.588 129.588 122.79 5102.05 5030.24 5030.24 4959.55 4959.55 4889.96 4889.96 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想在每一行中保留所有唯一值,并将每个重复值减少到成对值中只有1个。
输出为:
df_unique
128.437 121.639 5100.9 5029.08 4888.81 0 0 0
129.588 122.79 5102.05 5030.24 4959.55 4889.96 0 0
Run Code Online (Sandbox Code Playgroud)
因此,如您现在所见,每行有一个对/ 2,如果该对相等。
伪代码将类似于:
df_unique = pd.DataFrame(columns=df_pairs.columns)
for columns in range(len(df_pairs.columns)):
if df_pairs.iloc[row_element] == df_pairs.iloc[row_element+1]:
unique_element = df_pairs.iloc[row_element]
df_unique[new_row_element] = unique_element
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以快速执行此操作,而无需逐对逐行进行迭代?
我不能简单地删除所有重复项,df.drop_duplicates()因为事实是,行中可能存在重复的值,这些重复值不一定是邻居对,而且如果要在唯一对中保留0,那么我会保留它们。
尝试这个:
(df.groupby(df.ne(df.shift(axis=1)).all(axis=0).cumsum(),
axis=1)
.apply(lambda x: x.drop(x.columns[1::2], axis=1))
.dropna(axis=1)
)
Run Code Online (Sandbox Code Playgroud)
输出:
0 2 3 4 6 8 10 12
-- ------- ------- ------- ------- ------- ------- ---- ----
0 128.437 121.639 5100.9 5029.08 4888.81 0 0 0
1 129.588 122.79 5102.05 5030.24 4959.55 4889.96 0 0
Run Code Online (Sandbox Code Playgroud)