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}
有没有一种简单的方法来按元素组合 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}