0

我对 Python 很陌生,尤其是 pandas。我有一个名为 KeyRow 的 DataFrame,它来自更大的 df:

KeyRow=df.loc[df['Order'] == UniqueOrderName[i]]

然后我做一个嵌套循环

for i in range (0,len(PersonNum)):
   print(KeyRow.loc[KeyRow['Aisle'] == '6', 'FixedPill'])

因此,它似乎仅在放置常量时才起作用,而如果我使用 PersonNum[0] 而不是 '6',即使两个值相等,它似乎也不起作用。当我使用 PersonNum[i] 这是我得到的输出:

Series([], Name: FixedPill, dtype: object)

而如果我使用'x',我会得到想要的结果:

15    5
Name: FixedPill, dtype: object
4

1 回答 1

3

有点不清楚您要通过这些问题来完成什么。如果您正在寻找过滤 DataFrame,那么我建议永远不要以迭代方式执行此操作。您应该充分利用.loc. 考虑这个例子:

df = pd.DataFrame([[1,2,3], [4,5,6],
                   [1,2,3], [2,5,6],
                   [1,2,3], [4,5,6],
                   [1,2,3], [4,5,6]], 
                  columns=["A", "B", "C"])
df.head()

    A   B   C
0   1   2   3
1   4   5   6
2   1   2   3
3   2   5   6
4   1   2   3

假设您有一个 PersonNum 列表,您想使用它来定位您的列表所在的特定字段PersonNum = [1, 2]。您可以通过执行以下步骤一步对 DataFrame 进行切片:

df.loc[df["A"].isin(PersonNum), "B"]

这将返回一个熊猫系列和

df.loc[df["A"].isin(PersonNum), "B"].to_frame()

它返回一个新的 DataFrame。使用.loc比迭代方法快得多。

于 2017-06-30T20:44:33.900 回答