Python中实现两个DataFrame小于10数值的双向同步移除需求咨询
同步移除两个DataFrame中小于10的数值(对应位置同步处理)
我来帮你搞定这个同步移除的需求!咱们直接一步步来实现,完全贴合你的要求:
首先明确核心规则:只要两个DataFrame中任意一个的单元格数值小于10,两个表格对应位置的数值都要移除。这里默认把移除的数值替换成NaN(保留表格结构,方便后续分析),如果需要换成空字符串或其他标记,后面也可以调整。
步骤1:构造测试数据(用你提供的样例)
先把你给的两个DataFrame用pandas构造出来,方便后续操作:
import pandas as pd # 第一个DataFrame data1 = { 'dt': ['2021-04-12', '2021-04-13', '2021-04-14', '2021-04-15'], 'AAPL': [36, 46, 12, 30], 'AMC': [28, 15, 4, 23], 'AMZN': [6, 5, 1, 3], 'ASO': [20, 16, 5, 14], 'ATH': [1, 6, 2, 2], 'SPCE': [5, 5, 2, 15], 'SRNE': [0, 0, 0, 0], 'TH': [0, 0, 0, 0], 'TSLA': [50, 122, 39, 101], 'VIAC': [23, 12, 1, 9], 'WKHS': [0, 1, 0, 0] } df1 = pd.DataFrame(data1).set_index('dt') # 第二个DataFrame data2 = { 'dt': ['2021-04-12', '2021-04-13', '2021-04-14', '2021-04-15'], 'AAPL': [41, 76, 21, 54], 'AMC': [28, 22, 15, 43], 'AMZN': [4, 7, 2, 9], 'ASO': [33, 12, 7, 2], 'ATH': [10, 29, 16, 31], 'SPCE': [5, 4, 2, 16], 'SRNE': [0, 0, 0, 0], 'TH': [0, 0, 0, 0], 'TSLA': [56, 134, 61, 83], 'VIAC': [14, 8, 3, 13], 'WKHS': [3, 2, 0, 1] } df2 = pd.DataFrame(data2).set_index('dt')
步骤2:创建统一的移除掩码
这是实现同步逻辑的关键!我们生成一个和DataFrame结构完全一致的布尔掩码,标记出所有需要移除的位置:
# 规则:只要df1或df2中对应位置的值小于10,就标记为True(需要移除) mask = (df1 < 10) | (df2 < 10)
举个例子:AMC列的2021-04-14行,df1的值是4(<10),所以mask这里是True;VIAC列的2021-04-13行,df2的值是8(<10),mask这里也是True——完美符合你的同步要求。
步骤3:应用掩码完成移除
用pandas的mask()方法,把标记为True的位置替换成NaN(也就是移除原来的数值):
# 对两个DataFrame分别应用掩码 df1_clean = df1.mask(mask) df2_clean = df2.mask(mask)
可选:自定义移除后的标记
如果你不想用NaN,想换成空字符串或其他值,直接用fillna()处理就行:
# 替换成空字符串 df1_clean = df1_clean.fillna('') df2_clean = df2_clean.fillna('')
验证结果
比如查看AMC列的结果:
- df1_clean中
2021-04-14的AMC值是NaN(因为原df1的值<10) - df2_clean中
2021-04-14的AMC值也是NaN(同步移除)
再看VIAC列的2021-04-13行: - df1原数值是12(>=10),但df2原数值是8(<10),所以两个表格的这个位置都被替换成
NaN,完全符合要求!
内容的提问来源于stack exchange,提问作者YanRemes
相关产品推荐
相关产品推荐

