gpt4 book ai didi

python - 从 3 个不同的 pandas 数据框中查找相同的行,其中行的排序不相似

转载 作者:行者123 更新时间:2023-12-04 15:36:54 27 4
gpt4 key购买 nike

我有三个不同的 Pandas 数据框。一个数据框中的行顺序与其他数据框中的行顺序无关。我想找到一个包含行的数据框,其中每一行将存在于某个索引处的三个原始数据框中(不同数据框可能不同)。

让我们看一个例子:

import pandas as pd 

# initialize list of lists
data1 = [['tom', 10], ['mike', 15], ['lucy', 20], ['jerry', 5]]
data2 = [['david', 5], ['bran', 6], ['tom', 10], ['mike', 15], ['jimmy', 20], ['kevin', 5], ['juli', 6]]
data3 = [['mike', 15], ['tom', 10], ['lucy', 20], ['ron', 5]]

# Create the pandas DataFrame
df1 = pd.DataFrame(data1, columns = ['Name', 'Age'])
df2 = pd.DataFrame(data2, columns = ['Name', 'Age'])
df3 = pd.DataFrame(data3, columns = ['Name', 'Age'])

如果我们打印这些数据框,我们得到

>> df1

Name Age
0 tom 10
1 mike 15
2 lucy 20
3 jerry 5

>> df2
Name Age
0 david 5
1 bran 6
2 tom 10
3 mike 15
4 jimmy 20
5 kevin 5
6 juli 6

>> df3
Name Age
0 mike 15
1 tom 10
2 lucy 20
3 ron 5

请注意,值 (tom, 10)(mike, 15) 的行出现在所有 3 个数据帧中。因此,我要创建的数据框如下所示(行的顺序无关紧要):

    Name    Age
0 mike 15
1 tom 10

我怎样才能高效地做到这一点?在我的实际问题中,我有 6 列,每个数据框中的行数可以在 30 到 200 之间。

最佳答案

您可以使用 pivot 然后使用 aggfunc='size' 来执行此操作:

df = pd.concat([df1,df2,df3]) 
maxlen = df.pivot_table(index=['Name', 'Age'], aggfunc='size').max()
new_df = (df.pivot_table(index=['Name', 'Age'], aggfunc='size') == maxlen).reset_index()
new_df[new_df[0] == True].reset_index(drop=True).drop(columns=0)


Name Age
0 mike 15
1 tom 10

您还可以使用 groupby(更简单的解决方案):

new_df = pd.concat([df1,df2,df3]).groupby(['Name','Age']).size() 
new_df[new_df == new_df.max()]

Name Age
mike 15 3
tom 10 3
dtype: int64

如果您不想要额外的列:

new_df[new_df == new_df.max()].reset_index().drop(columns=0)

Name Age
0 mike 15
1 tom 10

关于python - 从 3 个不同的 pandas 数据框中查找相同的行,其中行的排序不相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com