我有一个熊猫数据帧:
sample_data = {'Sample': ['A', 'B', 'A', 'B'],
'Surface': ['Top', 'Bottom', 'Top', 'Bottom'],
'Intensity' : [21, 32, 14, 45]}
sample_dataframe = pd.DataFrame(data=sample_data)
我有一个功能可以获得用户输入,为每个"样本"创建一个带有"条件"的列
def get_choice(df, column):
#df['Condition'] = user_input
user_input = []
for i in df[column]:
print('n', i)
user_input.append(input('Condition= '))
df['Condition'] = user_input
return df
get_choice(group_fname, 'Sample')
这是有效的,但是对于存在"Sample"的每一行,都会提示用户。在这个示例中,Samples各有两行,这不是问题,但当DataFrame较大并且有多个Samples占用多行时,这会变得乏味。
如何创建一个函数,只需获取一次输入,就可以为"Sample"占用的每一行填充"Condition"列。
我尝试创建一个函数来返回一个字典,然后将其.apply()
返回到DataFrame,但当我这样做时,它仍然要求为"Sample"的每个实例输入。
如果我理解你的问题,你只想为每个唯一值获得一次用户输入,然后创建列'Condition'
:
sample_data = {'Sample': ['A', 'B', 'A', 'B'],
'Surface': ['Top', 'Bottom', 'Top', 'Bottom'],
'Intensity' : [21, 32, 14, 45]}
sample_dataframe = pd.DataFrame(data=sample_data)
def get_choice(df, column):
m = {}
for v in df[column].unique():
m[v] = input('Condition for [{}] = '.format(v))
df['Condition'] = df[column].map(m)
return df
print( get_choice(sample_dataframe, 'Sample') )
打印(例如(
Condition for [A] = 1
Condition for [B] = 2
Sample Surface Intensity Condition
0 A Top 21 1
1 B Bottom 32 2
2 A Top 14 1
3 B Bottom 45 2