我有一个数据框与列A和列B,可以有相同的值对时排序。我想重复删除这些列,因为我不关心应用程序中的顺序。如何从熊猫的多列创建排序列表值?
下面是一个示例数据框:
import pandas as pd
df = pd.DataFrame({'col1':[1, 2, 3], 'col2':[2, 1, 4]})
print(df)
这是数据框的样子:
index col1 col2
0 1 2
1 2 1
2 3 4
我想实现的是创造条件,已经整理的前两个列表中的新列每行的值,所以我将能够基于此列对数据帧进行重复数据删除。
的key_column应该是这样的:
0 [1, 2]
1 [1, 2]
2 [3, 4]
我会再使用df.drop_duplicates(COL3)
我有一个想法,我应该要么。适用使用或.MAP也许有些拉姆达功能,但没有我想的工作至今:
df.apply(lambda row: sorted([row[0], row[1]]), axis=1) # this sorts the column values in place but doesn't create a new column with a list
sorted([df['col1'], df['col2']]) # returns error The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df.map(sorted) # dataframe object has no attribute map
df[['col1', 'col2']].apply(lambda x:
sorted([','.join(x.astype(int).astype(str))]), axis=1) # creates a list but is not sorted
感谢您的帮助,我希望看到一个解决方案,还解释 - 为什么它的工作原理。
你能澄清可能(或交相关链接)如何选择1部作品,为什么你需要申请的元组的两倍?例如,当我想将它转换为numpy数组时,我这样做:'df.apply(tuple,1).map(np.array)'并且它可以工作,但是当我做'df.apply(np.array, 1)'它不起作用 – StefanK
@StefanK我使用两个'apply'调用的唯一原因是因为我不想使用lambda!但是你也可以使用1。 –
@StefanK排序后的调用结果是列表(大熊猫隐式转换它们)。所以需要另一个应用电话。 –