数据框中与其他列共享名称的访问列

2024-06-13 08:20:25 发布

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

我有三个不同的列,每个列名为Weight (LB)。当我打印列名时,pandas似乎用Weight (LB)Weight (LB).1Weight (LB).2来区分它们。因此,我尝试在迭代行并将它们的值附加到单独的列表中时逐个访问每个行。我应该有3张22号的单子,但是我有3张66号的单子。每个列表都获取Weight (LB)列中的所有值。所以我把它调高,试着访问特定的列索引。当然这不可能不起作用!但我最终还是在同一条船上。你知道吗

>>> for idx, row in df.iterrows():
...     squat.append(df.iloc[idx, 6])
...     if row['Exercise 2'] == 'Overhead press':
...             overhead.append(df.iloc[idx, 14])
...     else:
...             bench.append(df.iloc[idx, 14])
...     if row['Exercise 3'] == 'Deadlift':
...             deadlift.append(df.iloc[idx, 22])
...     else:
...             barbell.append(df.iloc[idx, 22])
... 
>>> len(squat)
66

因此,基本上我需要的帮助是分别访问特定列中的数据,尽管它们具有相同的名称。你知道吗

谢谢!你知道吗

编辑:我可以通过iloc正确地访问每一列,但是无论出于什么原因,所有的值都被添加到每个列表中。欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧欧

再次编辑:我注意到,当我使用squat = bench = overhead = deadlift = barbell = []创建列表时,它会产生意外的行为,但当我在各自的行上创建列表时,它会按预期工作。你知道吗


Tags: df列表ifelse单子rowweightlb
1条回答
网友
1楼 · 发布于 2024-06-13 08:20:25

我只想给你的专栏改名,总的来说这会让你的生活更轻松。使用重复项有点棘手,但是您可以使用类似这样的映射函数直接指定给列。你知道吗

def rename_dup(col):
    ans = []
    counter = 1
    for c in col:
        if c.startswith('Weight (LB)'):
            ans.append(c + str(counter))
            counter += 1
        else:
            ans.append(c)

    return ans

df.columns = rename_dup(df.columns)

另外,您可能不想使用itterrows。或许可以这样写:

overhead =  df.loc[df['Exercise 2'] == 'Overhead press', 'Weight(LB)2']
bench =  df.loc[df['Exercise 2'] != 'Overhead press', 'Weight(LB)2']
# etc...

相关问题 更多 >