huangjijingshi/luckCalc_huangjijingshi.py
2025-05-06 17:57:02 +08:00

51 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pandas as pd
import numpy as np
def luckCalc_huangjijingshi(Map64Gua, yearGuaMap, GuaLuck):
"""
计算年份吉凶卦象
Args:
Map64Gua (pd.DataFrame): 64卦映射表包含卦名、爻信息和二进制值
yearGuaMap (list or pd.DataFrame): 年份卦象映射表,格式为 [年份, 卦名]
GuaLuck (pd.DataFrame): 吉凶卦象包含6爻信息
Returns:
pd.DataFrame: 包含年份、年卦和吉凶卦的结果表
"""
LuckYear = []
# 确保 yearGuaMap 是 DataFrame如果是列表先转换
if isinstance(yearGuaMap, list):
yearGuaMap = pd.DataFrame(yearGuaMap, columns=['Year', 'Trigram'])
for i in range(len(yearGuaMap)):
kYear = yearGuaMap.iloc[i] # 当前年份和卦名
trigram = kYear['Trigram']
# 找到当前卦名对应的卦象(爻信息)
k1 = Map64Gua[Map64Gua['trigram'] == trigram].index
if len(k1) == 0:
raise ValueError(f"未找到卦名 {trigram} 对应的卦象")
# 提取当前卦的6爻和吉凶卦的6爻合并计算
abc = Map64Gua.loc[k1, ['yao1', 'yao2', 'yao3', 'yao4', 'yao5', 'yao6']].values
abc_luck = GuaLuck[['yao1', 'yao2', 'yao3', 'yao4', 'yao5', 'yao6']].values
abc_combined = np.vstack([abc, abc_luck])
# 计算新卦的二进制值模2求和后加权
abc2 = np.mod(np.nansum(abc_combined, axis=0), 2)
abc3 = np.sum(abc2 * [1, 2, 4, 8, 16, 32])
# 查找对应的新卦
new_gua = Map64Gua[Map64Gua['value_2binary'] == abc3].iloc[0]
LuckYear.append(new_gua)
# 合并结果
LuckYear = pd.DataFrame(LuckYear)
LuckYear['Year'] = yearGuaMap['Year'].values
LuckYear['YearGua'] = yearGuaMap['Trigram'].values
# 调整列顺序(年份和年卦在前)
cols = ['Year', 'YearGua'] + [c for c in LuckYear.columns if c not in ['Year', 'YearGua']]
LuckYear = LuckYear[cols]
return LuckYear