如何用从应用于每一行索引的usermade函数派生的值填充dataframe列?

2024-05-23 20:05:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的dataframe中生成一个新的列,其中填充了一个用户定义函数的结果,应用于每一列的索引。然而,我不知道如何在熊猫身上做到最好

作为背景,我有一个列出我的示例的数据框。每个示例在另一个文件夹中都有几个关联的.csv文件,其中包含其他数据。我想在dataframe中自动生成一列,其中包含与每个示例关联的文件列表。为此,我希望将每个文件名与示例名称(dataframe的索引值)进行比较,并将匹配的文件名添加到列表中

我觉得df.apply()可能是我需要的东西,但我不知道如何使它适合我的目的

我的数据帧如下所示:

>>>df = pd.read_csv('isotope_data.csv', index_col = 'Sample')
>>>df

              d13C     d2H
Sample                    
KMa-Sah-1  -23.696 -297.40
KMa-Sah-2  -25.304 -303.86
KMa-Sah-3  -22.236     NaN
KMa-Sah-4  -23.814 -289.03
KMa-Sah-5  -21.340 -275.20
KMa-Sah-6  -19.313 -289.30
KMa-Sah-7  -23.739 -327.30
KMa-Sah-8  -21.770 -277.80
KMa-Sah-9  -23.210 -309.50
KMa-Sah-10 -24.514 -314.07

这是我目前提出的非功能性解决方案:

# make the string lowercase and alphanumeric for easier comparison
def stripped(string):
    return re.sub(r'\W+', '', string).lower()

# generate a list of filenames that match a given string
def list_filenames(name, folder):
    files = listdir(folder)
    return [f'{folder}/{file}' for file in files if stripped(name) in stripped(file)]

# generate a new column with df.apply()
def make_filelist(x):
    x['Filenames'] = list_filenames(x.index, 'ftir_data')
    return x

df.apply(make_filelist)

我希望最终结果是这样的:

        d13C        d2H         Filenames
Sample          
KMa-Sah-1   -23.696     -297.40     [ftir_data/MAND_KMA-SAH1_DIRECT DEPOSIT_3.CSV,...]
KMa-Sah-2   -25.304     -303.86     [ftir_data/MAND_KMA-SAH2_DIRECT DEPOSIT_2.CSV,...]
KMa-Sah-3   -22.236     NaN         [ftir_data/MAND_KMA-SAH3_DIRECT DEPOSIT_1.CSV,...]
KMa-Sah-4   -23.814     -289.03     [ftir_data/MAND_KMA-SAH4_DIRECT DEPOSIT_1.CSV,...]
KMa-Sah-5   -21.340     -275.20     [ftir_data/MAND_KMA-SAH5_DIRECT DEPOSIT_1.CSV,...]
KMa-Sah-6   -19.313     -289.30     [ftir_data/MAND_KMA-SAH6_DIRECT DEPOSIT_1.CSV,...]
KMa-Sah-7   -23.739     -327.30     [ftir_data/MAND_KMA-SAH7_DIRECT DEPOSIT_3.CSV,...]
KMa-Sah-8   -21.770     -277.80     [ftir_data/MAND_KMA-SAH8_DIRECT DEPOSIT_3.CSV,...]
KMa-Sah-9   -23.210     -309.50     [ftir_data/MAND_KMA-SAH9_DIRECT DEPOSIT_1.CSV,...]
KMa-Sah-10  -24.514     -314.07     [ftir_data/MAND_KMA-SAH10_DIRECT DEPOSIT_4.CSV...]

Tags: csv数据示例dataframedfdatastringdirect
1条回答
网友
1楼 · 发布于 2024-05-23 20:05:46

看看the documentation for ^{},您可能应该做两件事:

  • 使用apply的结果在dataframe中创建列
  • 指定运行apply的轴

这会产生如下结果:

df['Filenames'] = df.apply(make_filelist, axis=1)

相关问题 更多 >