根据应用于两个数据框的条件创建第三个数据框
Create third dataframe based on condition applied to two dataframes
我有两个数据框:
df1 = pd.DataFrame(rng.rand(1000, 3), columns=['A', 'B', 'C'])
df2 = pd.DataFrame(rng.rand(1000, 3), columns=['A', 'B', 'C'])
我还有一个由 "Y" 和 "N" 组成的列:
df0['Split'] = ['Y', 'N', 'Y'...]
我想创建第三个数据帧 returns df1 if df0['Split'] = 'Y' 和 returns df2 if df0['Split'] = 'N'。如果可能的话,我想保留原来两个数据框的形状。
我认为我可以做如下事情:
if df0['Split'] == Y:
return df1
if df0['Split'] == N:
return df2
else:
return 0
实际上,我的列比 A 到 C 多得多。感谢您的帮助。
您可以使用布尔过滤构造两个数据帧,通过pd.concat
合并,然后sort_index
。该解决方案假设所有 3 个数据帧共享相同的索引。
mask = df0['Split'] == 'Y'
res = pd.concat([df1[mask], df2[~mask]]).sort_index()
我有两个数据框:
df1 = pd.DataFrame(rng.rand(1000, 3), columns=['A', 'B', 'C'])
df2 = pd.DataFrame(rng.rand(1000, 3), columns=['A', 'B', 'C'])
我还有一个由 "Y" 和 "N" 组成的列:
df0['Split'] = ['Y', 'N', 'Y'...]
我想创建第三个数据帧 returns df1 if df0['Split'] = 'Y' 和 returns df2 if df0['Split'] = 'N'。如果可能的话,我想保留原来两个数据框的形状。
我认为我可以做如下事情:
if df0['Split'] == Y:
return df1
if df0['Split'] == N:
return df2
else:
return 0
实际上,我的列比 A 到 C 多得多。感谢您的帮助。
您可以使用布尔过滤构造两个数据帧,通过pd.concat
合并,然后sort_index
。该解决方案假设所有 3 个数据帧共享相同的索引。
mask = df0['Split'] == 'Y'
res = pd.concat([df1[mask], df2[~mask]]).sort_index()