用户输入以在 Pandas DataFrame 中创建列

User input to create a column in Pandas DataFrame

我有一个 pandas 数据框:

sample_data = {'Sample': ['A', 'B', 'A', 'B'],
                'Surface': ['Top', 'Bottom', 'Top', 'Bottom'],
                'Intensity' : [21, 32, 14, 45]}

sample_dataframe = pd.DataFrame(data=sample_data)

而且我有一个函数可以让用户输入为每个 'Sample'

创建一个带有 'Condition' 的列
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' 的每一行。在这个示例中,每个样本有两行,这不是问题,但是当 DataFrame 较大并且有多个样本占用多行时,它会变得乏味。

我如何创建一个函数来填充 'Sample' 占用的每一行的 'Condition' 列,只需获取一次输入即可。

我尝试将函数创建到 return 字典然后 .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