[英]Filter unique matches of multiple columns in dataframe with Pandas
我对熊猫相当陌生,我一直在尝试使用dataframe.merge
和lambda
逻辑来解决这个问题的多种解决方案,但我一直无法找到与我正在寻找的结果一致的解决方案。 使用过滤一些数据后
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.