繁体   English   中英

使用 Pandas 过滤数据框中多列的唯一匹配项

[英]Filter unique matches of multiple columns in dataframe with Pandas

我对熊猫相当陌生,我一直在尝试使用dataframe.mergelambda逻辑来解决这个问题的多种解决方案,但我一直无法找到与我正在寻找的结果一致的解决方案。 使用过滤一些数据后

df = df.groupby(['0', '1']).size()
df = df.to_frame(name='2').reset_index()

我得到下表,前两列分别代表起点和终点,第三列代表在groupby之前重复的次数:

0   1   2
a   d   8
b   h   7
c   f   3
c   e   3
d   a   2
b   b   2
e   c   1
f   c   1
g   i   1
h   b   1
i   g   1

我需要同时考虑开始 -> 结束和结束 -> 起点,这意味着以下数据帧:

0   1   2
a   d   8
d   a   2

应该像这样结束:

0   1   2
a   d   10

回到原来的表格,最后应该是这样的:

0   1   2
a   d   10
b   h   8
c   f   4
c   e   4
b   b   2
g   i   2

我相当确定这应该是一个简单的解决方案,但对于我的生活,我无法确定答案。

你可以这样做:

df1 = df[['0', '1']].apply(sorted, 1, result_type = "expand").rename(columns = {0:'col1', 1:'col2'})
    
result = df.groupby([df1.col1, df1.col2]).sum().reset_index()

一种选择是使用apply对列中的值进行排序,然后再进行一次groupby (请注意,您的列名可能不同,我的df是使用pd.read_clipboard()

df.reset_index(inplace=True)

df[['0','1']]=df[['0','1']].apply(lambda x:sorted(x),axis=1).tolist()

df

    0   1   2
0   a   d   8
1   b   h   7
2   c   f   3
3   c   e   3
4   a   d   2
5   b   b   2
6   c   e   1
7   c   f   1
8   g   i   1
9   b   h   1
10  g   i   1

df.groupby(['0','1'], as_index=False).sum()

    0   1   2
0   a   d   10
1   b   b   2
2   b   h   8
3   c   e   4
4   c   f   4
5   g   i   2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM