我有一个大型df,格式如下:
df1 =
ID char
r1 foo
r2 foo
r5 bar
r9 bar
... ...
还有一个更大的格式:
df2 =
ID a12 b23 c81 ...
r1 foo baz bar ...
r2 foo foo bar ...
r3 bar bar baz ...
r4 bar baz bar ...
... ... ... ...
查看两个df中的ID行,我想收集其余所有列匹配的计数。因此,对于ID r1
,我在df2中查看该行,仅看到a12
个匹配项。我想跟踪每场比赛,因此对于第一行,我将拥有
a12 1
b23 0
c81 0
df2中的某些行在df1中没有行(df2有r4
行,而df1没有)。此示例的总计为:
a12 2
b23 1
c81 0
df1是一个.csv,可以加载到内存中,但是df2太大,以至于我将其分块加载。因此,要比较两者,我将它们都装入,然后必须从类似以下内容开始:
df1 = pd.read_csv("C:\\Users\\me\\df1.csv")
df2 = pd.read_table("C:\\Users\\me\\df2.vcf.gz", header = None, names = header_line, engine = 'c',
compression = 'gzip', chunksize = 40000, low_memory=False)
for chunk in df2:
答案 0 :(得分:2)
将DataFrames
合并在一起,然后使用.eq
查看哪些列等于'char'
列。
s = pd.Series()
for chunk in df2:
merged = df1.merge(chunk, on='ID')
s = s.add(merged[[col for col in chunk.columns if col != 'ID']].eq(merged.char, axis=0).sum(),
fill_value=0)
s
a12 2.0
b23 1.0
c81 0.0
dtype: float64