我正在处理一个非常大的数据框,并且正在使用它pandas
来进行分析。数据帧的结构如下
import pandas as pd
df = pd.read_csv("data.csv")
df.head()
Source Target Weight
0 0 25846 1
1 0 1916 1
2 25846 0 1
3 0 4748 1
4 0 16856 1
问题是我想删除所有“重复项”。从某种意义上说,如果我已经有一个包含aSource
和a的行,则Target
我不希望在另一行上重复此信息。例如,在这种意义上,行号0和2是“重复的”,并且仅应保留其中之一。
摆脱所有“重复”的一种简单方法是
for index, row in df.iterrows():
df = df[~((df.Source==row.Target)&(df.Target==row.Source))]
但是,由于我的数据帧有大约300万行,因此这种方法的速度非常慢。您认为这样做有更好的方法吗?
创建两个临时列以保存minimum(df.Source, df.Target)
和maximum(df.Source, df.Target)
,然后按以下duplicated()
方法检查重复的行:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0, 5, (20, 2)), columns=["Source", "Target"])
df["T1"] = np.minimum(df.Source, df.Target)
df["T2"] = np.maximum(df.Source, df.Target)
df[~df[["T1", "T2"]].duplicated()]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句