如何从 pandas 数据框中删除包含前两列组合的行
How to remove rows from pandas dataframe that contain combinations of the first two columns
我试图摆脱包含 pandas 数据框中前两列的元素组合的行,例如,在下一个 df:
event1 event2 uccs ulags
0 327423.0 329243.0 0.1663 -0.6013
1 327423.0 329589.0 0.1911 -0.4730
2 329243.0 327423.0 0.1663 0.6013
3 329243.0 329589.0 0.3101 -0.7502
4 329589.0 327423.0 0.1911 0.4730
5 329589.0 329243.0 0.3101 0.7502
第 0 行和第 2 行表示元素的组合:event1 和 event2。即:
0 327423.0 329243.0
2 329243.0 327423.0
一般来说,我需要将矩阵或 df 减少到 3 行,删除所有重复项。
我试了下没有成功:
u = df.filter(like='event1').values
m = pd.DataFrame(np.sort(u, axis=1)).duplicated()
这样做我得到:
event1 event2 uccs ulags
0 327423.0 329243.0 0.1663 -0.6013
2 329243.0 327423.0 0.1663 0.6013
4 329589.0 327423.0 0.1911 0.4730
但是如您所见,第 0 行和第 2 行是重复的。关于如何在 pandas 或 numpy 中执行此操作的任何提示将不胜感激。
如果我没理解错的话,你已经非常接近了,你只需要将你的布尔数组传回你的数据框 boolean indexing
:
df[~pd.DataFrame(np.sort(df.filter(like='event'), axis=1)).duplicated()]
event1 event2 uccs ulags
0 327423.0 329243.0 0.1663 -0.6013
1 327423.0 329589.0 0.1911 -0.4730
3 329243.0 329589.0 0.3101 -0.7502
注意我使用的 ~
是相反的或 not 运算符:
m = pd.DataFrame(np.sort(df.filter(like='event'), axis=1)).duplicated()
print(m)
0 False
1 False
2 True
3 False
4 True
5 True
dtype: bool
现在反转:
print(~m)
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool
我试图摆脱包含 pandas 数据框中前两列的元素组合的行,例如,在下一个 df:
event1 event2 uccs ulags
0 327423.0 329243.0 0.1663 -0.6013
1 327423.0 329589.0 0.1911 -0.4730
2 329243.0 327423.0 0.1663 0.6013
3 329243.0 329589.0 0.3101 -0.7502
4 329589.0 327423.0 0.1911 0.4730
5 329589.0 329243.0 0.3101 0.7502
第 0 行和第 2 行表示元素的组合:event1 和 event2。即:
0 327423.0 329243.0
2 329243.0 327423.0
一般来说,我需要将矩阵或 df 减少到 3 行,删除所有重复项。
我试了下没有成功:
u = df.filter(like='event1').values
m = pd.DataFrame(np.sort(u, axis=1)).duplicated()
这样做我得到:
event1 event2 uccs ulags
0 327423.0 329243.0 0.1663 -0.6013
2 329243.0 327423.0 0.1663 0.6013
4 329589.0 327423.0 0.1911 0.4730
但是如您所见,第 0 行和第 2 行是重复的。关于如何在 pandas 或 numpy 中执行此操作的任何提示将不胜感激。
如果我没理解错的话,你已经非常接近了,你只需要将你的布尔数组传回你的数据框 boolean indexing
:
df[~pd.DataFrame(np.sort(df.filter(like='event'), axis=1)).duplicated()]
event1 event2 uccs ulags
0 327423.0 329243.0 0.1663 -0.6013
1 327423.0 329589.0 0.1911 -0.4730
3 329243.0 329589.0 0.3101 -0.7502
注意我使用的 ~
是相反的或 not 运算符:
m = pd.DataFrame(np.sort(df.filter(like='event'), axis=1)).duplicated()
print(m)
0 False
1 False
2 True
3 False
4 True
5 True
dtype: bool
现在反转:
print(~m)
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool