import pandas as pd def bianyao_huangjijingshi(Map64Gua: pd.DataFrame, yaoOrig: str) -> pd.DataFrame: """ 皇极经世:变爻计算 输入原爻(如 '000100'),输出所有变爻之后的卦象合集 """ #print("Map64Gua:",Map64Gua['yaoAll'].apply(type).value_counts()) # 找到原始卦所在的行 if 'yaoAll' not in Map64Gua.columns: raise ValueError("'yaoAll' 列在 Map64Gua 中不存在,请检查数据") Map64Gua = Map64Gua.copy() Map64Gua['yaoAll'] = Map64Gua['yaoAll'].astype(str).str.zfill(6).str.strip() yaoOrig = str(yaoOrig).zfill(6).strip() # 找到原始卦所在的行 matches = Map64Gua[Map64Gua['yaoAll'] == yaoOrig] if matches.empty: raise ValueError(f"未找到 yaoAll 为 {yaoOrig} 的卦象") k2 = matches.iloc[0] # 取第一行 # 计算原卦的二进制值 a0 = (k2['yao1'] + k2['yao2']*2 + k2['yao3']*4 + k2['yao4']*8 + k2['yao5']*16 + k2['yao6']*32) # 依次翻转每一爻,得到新卦的二进制值 a1 = (k2['yao1'] + k2['yao2']*2 + k2['yao3']*4 + k2['yao4']*8 + k2['yao5']*16 + (1 - k2['yao6'])*32) a2 = (k2['yao1'] + k2['yao2']*2 + k2['yao3']*4 + k2['yao4']*8 + (1 - k2['yao5'])*16 + k2['yao6']*32) a3 = (k2['yao1'] + k2['yao2']*2 + k2['yao3']*4 + (1 - k2['yao4'])*8 + k2['yao5']*16 + k2['yao6']*32) a4 = (k2['yao1'] + k2['yao2']*2 + (1 - k2['yao3'])*4 + k2['yao4']*8 + k2['yao5']*16 + k2['yao6']*32) a5 = (k2['yao1'] + (1 - k2['yao2'])*2 + k2['yao3']*4 + k2['yao4']*8 + k2['yao5']*16 + k2['yao6']*32) a6 = ((1 - k2['yao1']) + k2['yao2']*2 + k2['yao3']*4 + k2['yao4']*8 + k2['yao5']*16 + k2['yao6']*32) # 结果列表 result = pd.DataFrame() # 查找对应的卦象 for a in [a0, a1, a2, a3, a4, a5, a6]: row = Map64Gua[Map64Gua['value_2binary'] == a] if not row.empty: result = pd.concat([result, row], ignore_index=True) return result