我有6个数据集。它们的名称是:e10_all,e11_all,e12_all,e13_all,e14_all和e19_all。
所有列和行的数量都不同,但是有一些常见的列。我需要将这些列的行附加在一起。首先,我想确定所有数据集共有的列,因此我知道要在SQL查询中选择哪些列。
在R中,我可以使用:
# Create list of dts
list_df = list(e10_all, e11_all, e12_all, e13_all, e14_all, e19_all)
col_common = colnames(list_df[[1]])
# Write for loop
for (i in 2:length(list_df)){
col_common = intersect(col_common, colnames(list_df[[i]]))
}
# View the common columns
col_common
# Get as a comma-separated list
cat(noquote(paste(col_common, collapse = ',')))
我想做同样的事情,但是用Python。有人碰巧知道一种方法吗?
谢谢
答案 0 :(得分:2)
大熊猫没什么不同。制作一些虚拟数据帧:
>>> import pandas as pd
>>> e10_all = pd.DataFrame({"A": [1,2], "B": [2,3], "C": [2,3]})
>>> e11_all = pd.DataFrame({"B": [4,5], "C": [5,6]})
>>> e12_all = pd.DataFrame({"B": [1,2], "C": [3,4], "M": [8,9]})
然后您的代码将转换为类似的内容
>>> list_df = [e10_all, e11_all, e12_all]
>>> col_common = set.intersection(*(set(df.columns) for df in list_df))
>>> col_common
{'C', 'B'}
>>> ','.join(sorted(col_common))
'B,C'
第二行将每个框架的列变成一组,然后取所有框架的交集。尽管我们倾向于避免在可以避免的地方编写循环,并且倾向于将循环直接遍历元素(for df in list_df[1:]:
),而不是通过索引进行遍历,但是对您的代码进行更直接的翻译也可以。还是
col_common = set(list_df[0].columns)
for i in range(1, len(list_df)):
col_common = col_common.intersection(list_df[i].columns)
将完成工作。