我有两个数据帧,如下所示:
df1:
id, f1, f2,..., f800
0, 5, 5.6,.., 3,7
1, 2.4, 1.6,.., 1,7
2, 3, 2.3,.., 4,4
....
n, 4.7, 9,3,..., 8,2
df2:
id, v1, v2,..., v200
0, 5, 5.6,.., 5,7
1, 2.4, 1.6,.., 6,7
2, 3, 2.3,.., 4,2
....
n, 4.7, 9,3,..., 3,1
df1包含800个功能,而df2仅包含200个功能。第二数据帧(df2)是第一数据帧(df1)的一部分。现在,我想查找包含df2列/变量的列的位置(在df1中)。在这里,列的值应该相似,而不是列的名称。考虑到上面的示例,我想要的输出应该是“ f1和f2”或df1的列[0,1]。
有解决这个问题的主意吗?
答案 0 :(得分:1)
我会合并两个数据帧,所以我确定只有相同的索引存在
result = pd.concat([df1, df2], axis=1, join='inner')
然后您可以使用以下代码:
import pandas as pd
def getDuplicateColumns(df):
duplicateColumnNames = set()
for x in range(df.shape[1]-200):
col = df.iloc[:, x]
for y in range(df.shape[1]-200, df.shape[1]):
otherCol = df.iloc[:, y]
#if the columns are equal mark it down
if col.equals(otherCol):
duplicateColumnNames.add(df.columns.values[y])
#here you can mark down both names, so you map them
return list(duplicateColumnNames)
cols = getDuplicateColumns(result)
,然后您可以对返回的选定列进行任何操作,即删除冗余列。 200是第二个df中的预期cols数量,您可以改为将其作为参数发送。如果您确定df1中的每个col在df2中只有1个匹配项,那么您也可以在找到匹配项后中断内部循环。
答案 1 :(得分:1)
您需要将此问题分解为一部分 一个是找到共同的特征
df1 = pd.DataFrame([[0,1,2,11],[3,4,5,12],[6,7,8,13]], columns=['A','B','C','D'])
df2 = pd.DataFrame([[1,2,11],[4,5,12],[7,8,14]], columns=['a','b','D'])
common = set(df1.columns) & set(df2.columns)
另一个正在检查天气,这两列是否相似
if(df1[common].equals(df2[common])):
print(df1[common])
else:
print("Nothing common")
要检查多列,您可以在if条件的顶部创建一个循环。
答案 2 :(得分:-1)
常用列:
common = set(df1.columns) & set(df2.columns)
要获取df2中存在的df1列:
df1[common]