簡體   English   中英

對 Pandas Dataframe 中的列和行進行迭代

[英]Iteration over columns and rows in Pandas Dataframe

假設我有一個如下所示的數據框:

d = {'option1': ['1', '0', '1', '1'], 'option2': ['0', '0', '1', '0'], 'option3': ['1', '1', '0', '0'], 'views': ['6', '10', '5', '2']
df = pd.DataFrame(data=d)

print(df)

  option1 option2 option3 views
0       1       0       1     6
1       0       0       1    10
2       1       1       0     5
3       1       0       0     2

我正在嘗試構建一個 for 循環,該循環遍歷每一列(“視圖”列除外)和每一行。 如果單元格的值不是 0,我想用同一行中“views”列的相應值替換它。

需要以下輸出(應該更容易理解):

  option1 option2 option3 views
0       6       0       6     6
1       0       0      10    10
2       5       5       0     5
3       2       0       0     2

我試過類似的東西:

df_range = len(df)

for column in df:
    for i in range(df_range):
        if column != 0:
            column = df.views[i]

但我知道我錯過了一些東西,它不起作用。

另請注意,在我的真實數據框中,我有幾十列,所以我需要一些自動迭代每一列的東西。 謝謝!!

我看到這個線程在逐行迭代時更新熊貓中的數據框,但它並不完全適用於我的問題,因為我不僅要逐行進行,還需要逐列進行。

您還可以通過這種方式實現您想要的結果:

for col in df:
    if col == 'views':
        continue
    for i, row_value in df[col].iteritems():
        df[col][i] = row_value * df['views'][i]

請注意有關此解決方案的以下信息:

1) 此解決方案單獨對數據幀中的每個值進行操作,因此效率低於廣播,因為它執行兩個循環(一個外部循環,一個內部循環)。

2) 該解決方案假定option1 ...option N 是二進制的,因為本質上該解決方案是將option1 ...option N 中的每個二進制值與views的值相乘。

3) 此解決方案適用於任意數量的選項列。 選項列可能有您想要的任何標簽。

4) 此解決方案假定有一列標記為views

您不需要遍歷行。 這個應該更快:確保列值是整數。

## convert column type to integer
for i in df:
    df[i] = df[i].astype(int)

## update columns
for col in df:
    if col != 'views':
        df[col] = df[col] * df['views']

df

    option1     option2     option3     views
0      6          0            6          6
1      0          0           10         10  
2      5          5            0          5
3      2          0            0          2
dataSet = pd.read_excel("dataset.xlsx")
i = 0 ;
for column in dataSet:
    for i in dataSet[column].iteritems():
        if (column == 'views'):
            print (i)

我認為這會奏效:

df=df.astype(int)
df[df.columns[:-1]]= np.where(df[df.columns[:-1]]>0, 1, 0)
df[df.columns[:-1]]= df[df.columns[:-1]].mul(df['views'].as_matrix(), axis=0)

暫無
暫無

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

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