[英]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.