gpt4 book ai didi

python - 根据另一个数据帧将 pandas 数据帧拆分为两个数据帧

转载 作者:行者123 更新时间:2023-12-01 00:48:42 24 4
gpt4 key购买 nike

我尝试在 Stackoverflow 上搜索此问题的答案,虽然有类似的答案,但我尝试调整已接受的答案,并且正在努力实现我想要的结果。

我有一个数据框:

df = pd.DataFrame({'Customer':
['A', 'B', 'C', 'D'],
'Sales':
[100, 200, 300, 400],
'Cost':
[2.25, 2.50, 2.10, 3.00]})

还有一个:

split = pd.DataFrame({'Customer':
['B', 'D']})

我想从原始数据帧 df 创建两个新数据帧,一个包含来自拆分数据帧的数据,另一个包含不在拆分中的数据。我需要 df 的原始结构保留在两个新创建的数据帧中。

我已经探索了 isin、合并、删除和循环,但一定有一种优雅的方法来实现看似简单的解决方案?

最佳答案

使用Series.isinboolean indexing对于过滤,~ 用于反向 bool 掩码:

mask = df['Customer'].isin(split['Customer'])

df1 = df[mask]
print (df1)
Customer Sales Cost
1 B 200 2.5
3 D 400 3.0

df2 = df[~mask]
print (df2)
Customer Sales Cost
0 A 100 2.25
2 C 300 2.10

另一个解决方案,如果需要将多个列与 DataFrame.merge 匹配,也可以工作。 (如果没有参数 on 则由所有列连接),使用带有 indicator 参数的外部连接:

df4 = df.merge(split, how='outer', indicator=True)
print (df4)
Customer Sales Cost _merge
0 A 100 2.25 left_only
1 B 200 2.50 both
2 C 300 2.10 left_only
3 D 400 3.00 both

再次通过不同的掩码进行过滤:

df11 = df4[df4['_merge'] == 'both']
print (df11)
Customer Sales Cost _merge
1 B 200 2.5 both
3 D 400 3.0 both

df21 = df4[df4['_merge'] == 'left_only']
print (df21)
Customer Sales Cost _merge
0 A 100 2.25 left_only
2 C 300 2.10 left_only

关于python - 根据另一个数据帧将 pandas 数据帧拆分为两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com