我有一個大約100,000行和1,000列的df,需要根據現有數據進行一些調整。我如何最好地解決這個問題?大部分的變化將遵循這個基本公式:循環遍歷列和調整值大熊貓
- 搜索欄(或兩個或三個),看看是否滿足條件
- 如果滿足,改變該行數十個列的值或數百
這是我最好的嘗試,在這裏我創建了列的列表,並正在查看第一列是否包含值1.在那裏,我只想添加一些數字。這部分工作,但它只在第一行,而不是列中的所有1。爲了解決這個問題,我想我需要創建一個循環,我有第二個[i]遍歷所有行,但我不確定是否我錯誤地處理了整個問題。 FWIW,test_cols =列的列表,testing_2是我的df。
def try_this(test_cols):
for i in range(len(test_cols)):
if i == 0 and testing_2[test_cols[i]][i] == 1:
testing_2[test_cols[i]][i]=testing_2[test_cols[i]][i]+78787
i+=1
return test_cols
編輯/例如:
Year Month Mean_Temp
City
Madrid 1999 Jan 7--this value should appear twice
Bilbao 1999 Jan 9--appear twice
Madrid 1999 Feb 9
Bilbao 1999 Feb 10
. . . .
. . . .
. . . .
Madrid 2000 Jan 6.8--this value should go away
Bilbao 2000 Jan 9.2--gone
所以我需要做這樣的事情(使用您的答案):通過創建一個功能,你可以做到這一點
def alter(row):
if row['Year'] == 2000 and row['Month'] == 'Jan':
row['Mean_Temp'] = row['Mean_Temp'] #from year 1999!
return row['Mean_Temp']
else:
return row['Mean_Temp']
一個好的解決方案取決於您希望執行的條件和計算的*細節*。例如,'if i == 0'條件意味着'for-loop'只在第一次迭代時纔會做一些不重要的事情。所以你真的不需要'for-loop'。另外,爲什麼在'for-loop'之外增加'i'?爲什麼返回'test_cols'如果它永遠不會被修改? – unutbu
@unutbu從whys開始:這可能是我修改了我在這裏找到並在以前使用過的groupby.apply函數中的一些代碼的結果。詳細信息將始終採用通用格式:'如果year = x'或'if year = x和month = y',其中year和month是DF中的列。計算的公式更少,更像小班:將年份= x和月份= y的100列中的值替換爲來自這些相同列但不同年份和月份的值。 – user2891518