计算具有相同 h、k 和 l 的等效行的平均强度

Calculate mean Intensity for equivalent rows having same h,k,and l

enter image description here

我想计算具有等效 h、k、l 的那些行的平均强度。等效的意思是 h=+/- h 和 k==/-k 和 l=+/- l 。需要满足这三个条件,那么这些行是等价的,我需要在新列中获取它们对应强度的平均值。例如,前 2 行阴影行是等效的,因此计算 average= (31.26 + 42.19)/2 并在每行旁边的新列中键入它。

尝试:

out = df.groupby([df['h'].abs(),df['k'].abs(),df['l'].abs()])['Intensity'].transform('mean')

['h','k','l'] 分组并求出每组的平均值 Intensity 并将组平均值应用于每一行。

按 +/-h、+/-k 和 +/-l 创建组并计算平均强度:

grps = [df['h'].abs(), df['k'].abs(), df['l'].abs()]
df['Mean Intensity'] = df.groupby(grps)['Intensity'].transform('mean')
print(df)

# Output:
   h  k  l  Intensity  Mean Intensity
0  1 -1 -1        138          152.00
1  0  1 -1        186          168.25
2  1  1  1        124          152.00
3  0  1  1        159          168.25
4  0  1  0        176          176.00
5  1 -1 -1        194          152.00
6  0  1 -1        199          168.25
7  0  0 -1        172          172.00
8  0 -1 -1        129          168.25
9  1  0 -1        134          134.00

设置:

data = {'h': [1, 0, 1, 0, 0, 1, 0, 0, 0, 1],
        'k': [-1, 1, 1, 1, 1, -1, 1, 0, -1, 0],
        'l': [-1, -1, 1, 1, 0, -1, -1, -1, -1, -1],
        'Intensity': [138, 186, 124, 159, 176, 194, 199, 172, 129, 134]}
df = pd.DataFrame(data)
print(df)

# Output:
   h  k  l  Intensity
0  1 -1 -1        138
1  0  1 -1        186
2  1  1  1        124
3  0  1  1        159
4  0  1  0        176
5  1 -1 -1        194
6  0  1 -1        199
7  0  0 -1        172
8  0 -1 -1        129
9  1  0 -1        134