Pandas 按元素组合数据帧(以优雅的方式)

Pandas combine dataframes elementwise (in elegant way)

有没有一种简单的方法来按元素组合 2 个数据帧? pd.DataFrame.combine 似乎只能按列工作。

在下面的示例中,我有 2 个包含集合的数据框。目标是从 2 个数据帧中获取集合的交集(使用 & 运算符完成)。

import pandas as pd
import numpy as np

def combine_elementwise(df, df2, func):
    def f(c,c2):
        return c.combine(c2, func)
    return df.combine(df2, f)

df = pd.DataFrame([
        [{1,2}, {3,4}],
        [{5,6}, {7,8}]
        ])

df2 = pd.DataFrame([
        [{9,2}, {1}],
        [{5,6}, {8,9}]
        ])

# this combines columnwise
print('Columnwise results:')
print(df.combine(df2, lambda c,c2: c&c2)) 

# this combines elementwise but is ugly
print('Elementwise results (what I need):')
print(combine_elementwise(df,df2, lambda a,b: a&b))
Columnwise results:
      0      1
0  True  False
1  True   True

Elementwise results (what I need):
        0    1
0     {2}   {}
1  {5, 6}  {8}

我写了 combine_elementwise 函数来实现我正在寻找的功能,但它很丑陋,我想知道是否有更简单的方法来完成同样的事情。

你可以这样做:

combined_df = pd.DataFrame(df.values & df2.values)
print(combined_df)

# output:
#         0    1
# 0     {2}   {}
# 1  {5, 6}  {8}

这里有点逻辑

out = df-(df-df2)
Out[242]: 
        0    1
0     {2}   {}
1  {5, 6}  {8}