【发布时间】:2020-07-16 02:45:30
【问题描述】:
数据表太长,请见谅。我不知道一种更简洁的方法来构建我下面的数据框。
我有一个熊猫数据框:
data = {'ID': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'Cycle': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
'Repetition': ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2'],
'Region': ['x', 'x','x','x','x','x','x','x', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'x','x','x','x','x','x','x','x', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y'],
'Intensity': [34, 89, 34, 45, 34, 56, 78, 65, 45, 45, 34, 56, 34, 56, 56, 66, 56, 78, 23, 45, 42, 56, 86, 5, 33, 44, 78, 89, 34, 42, 34, 66]}
data_df= pd.DataFrame(data)
我想添加一个列,用于计算每个 ID(A 和 B)和每个区域(x 和 y)在 Cycle == 1 时的平均强度,并在所有其他行中保留 NaN 值。结果数据框将返回:
wanted_data = {'ID': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'Cycle': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
'Repetition': ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2'],
'Region': ['x', 'x','x','x','x','x','x','x', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'x','x','x','x','x','x','x','x', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y'],
'Intensity': [34, 89, 34, 45, 34, 56, 78, 65, 45, 45, 34, 56, 34, 56, 56, 66, 56, 78, 23, 45, 42, 56, 86, 5, 33, 44, 78, 89, 34, 42, 34, 66],
'Mean Cycle1 Intensity': [39.5, '', '', '', 34, '', '', '', '', '', '', '', '', '', '', '', 44.5, '', '', '', 38, '', '', '', '', '', '', '', '', '', '', ''] }
wanted_data_df= pd.DataFrame(wanted_data)
我尝试添加一个函数:
def meanC1(df):
for i in df['ID'] and j in df['Region']:
if df['Cycle'] == 1:
df['Mean Cycle1 Intensity'] = df['Intensity'].mean()
但这又回来了,
ValueError:Series 的真值不明确。使用a.empty, a.bool()、a.item()、a.any() 或 a.all()
【问题讨论】: