簡體   English   中英

迭代熊貓數據框中的列和行

[英]Iterating over columns and rows in pandas dataframe

我試圖遍歷我擁有的數據框並使用單元格內的值,但我需要使用單元格來自的列和行的名稱。 因此,我目前正在執行以下操作:

df=pandas.DataFrame(data={"C1" : [1,2,3,4,5], "C2":[1,2,3,4,5]}, 
                    index=["R1","R2","R3","R4","R5"])
for row in df.index.values:
    for column in df.columns.values:
       if (df[row][column] > 3:
           if row in df2[column]:
              print("data is present")

我需要使用行名和列名,因為我使用它們在另一個具有相關信息的數據框中查找值。 我知道 for 循環在 Pandas 中是永遠存在的,但是我找不到任何關於如何同時迭代行和列的示例。 這個:

df.applymap()

不會工作,因為它只給出單元格中的值,而不保留單元格所在的行和列的引用,並且這個:

df.apply(lambda row: row["column"])

將無法工作,因為我需要在之前不知道的情況下獲取列的名稱。 還有這個:

df.apply(lambda row: someFunction(row))

不會工作,因為 apply 使用只有行名而不是​​行名和列名的 Series 對象。

任何見解都會有所幫助! 我目前正在運行 for 循環版本,但它需要永遠並且占用 CPU 內核。

import pandas as pd

df = pd.DataFrame(data={"C1": [1, 2, 3, 4, 5], 
                        "C2": [1, 2, 3, 4, 5]}, 
                  index=["R1", "R2", "R3", "R4", "R5"])
df2 = pd.DataFrame({'R3': [1], 'R5': [1], 'R6': [1]})

要從 df2 中獲取在 df 中值大於 3 的所有相應列,您可以使用條件列表推導式:

>>> [idx for idx in df[df.gt(3).any(axis=1)].index if idx in df2]
['R5']

要查看這是如何工作的:

>>> df.gt(3)
       C1     C2
R1  False  False
R2  False  False
R3  False  False
R4   True   True
R5   True   True

然后我們想要任何值大於 3 的行的索引:

df.gt(3).any(axis=1)
Out[23]: 
R1    False
R2    False
R3    False
R4     True
R5     True
dtype: bool

>>> df[df.gt(3).any(axis=1)]
    C1  C2
R4   4   4
R5   5   5

>>> [i for i in df[df.gt(3).any(axis=1)].index]
['R4', 'R5']

>>> [i for i in df[df.gt(3).any(axis=1)].index if i in df2]
['R5']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM