我想在我的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...]
看看the documentation for ^{} ,您可能应该做两件事:
apply
的轴李>这会产生如下结果:
相关问题 更多 >
编程相关推荐