我有一個簡單的數據集,熊貓條件創造列發出
import pandas as pd
df = {
'columA':['1A','ws rank','rank','ws rank','rank','Drank'],
'value': [ 1, 12, 34, 50, 3,2]
}
df = pd.DataFrame(df)
1.我想創建一個列「HP」,因爲這是「WS排名」和「排名」和'columnA行喝',如果價值是1,那麼HP是25,如果價值是2,那麼HP是24 ...等等。
所以我首先創建了一個較小的數據集,以僅包含那些行,因爲我的真實數據集非常大。然後,我將連接此數據集和原始數據集以包含「HP」列。但是當我連接數據集時,有重複的行。所以必須有一個更簡單的方法。
我的代碼:
dfrank=df[df["columA"].str.contains('ws rank|rank')]
dfrank['value'] = dfrank['value'].astype(int)
dfrank.loc[dfrank.value == 1, 'HP'] = 25
dfrank.loc[dfrank.value == 2, 'HP'] = 24
dfrank.loc[dfrank.value == 3, 'HP'] = 23
dfrank.loc[dfrank.value == 4, 'HP'] = 22
dfrank.loc[dfrank.value == 5, 'HP'] = 21
dfrank.loc[dfrank.value == 6, 'HP'] = 20
dfrank.loc[dfrank.value == 7, 'HP'] = 19
dfrank.loc[dfrank.value == 8, 'HP'] = 18
dfrank.loc[dfrank.value == 9, 'HP'] = 17
dfrank.loc[dfrank.value == 10, 'HP'] = 16
dfrank.loc[dfrank.value == 11, 'HP'] = 15
dfrank.loc[dfrank.value == 12, 'HP'] = 14
dfrank.loc[dfrank.value == 13, 'HP'] = 13
dfrank.loc[dfrank.value == 14, 'HP'] = 12
dfrank.loc[dfrank.value == 15, 'HP'] = 11
dfrank.loc[dfrank.value == 16, 'HP'] = 10
dfrank.loc[dfrank.value == 17, 'HP'] = 9
dfrank.loc[dfrank.value == 18, 'HP'] = 8
dfrank.loc[dfrank.value == 19, 'HP'] = 7
dfrank.loc[dfrank.value == 20, 'HP'] = 6
dfrank.loc[(dfrank.value > 20)&(dfrank.value <= 50), 'HP'] = 5
df2=pd.concat([df, dfrank])
是否有更簡單的方式來做到這些條件? 也 我不斷收到此錯誤信息,但我想我已經在使用的形式它的提示 :SettingWithCopyWarning: 值要試圖從一個數據幀的一個切片的副本設置。 嘗試使用的.loc [row_indexer,col_indexer] =值代替
查看的文檔中的注意事項:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy dfrank [ '值'] = dfrank [ '值'] astype(INT) H:。/代碼/ PythonScripts/python_work/dataset1.py:20:SettingWithCopyWarning: 正嘗試在DataFrame的切片副本上設置一個值。 嘗試使用的.loc [row_indexer,col_indexer] =值代替
查看的文檔中的注意事項:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy dfrank.loc [dfrank.value == 1, 'HP'] = 25 C:\用戶\ amywang \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py:477:SettingWithCopyWarning: 正試圖在來自DataFrame的切片副本上設置一個值。 嘗試使用的.loc [row_indexer,col_indexer] =值代替
查看的文檔中的注意事項:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj [項目] = S
2.然後我想創建一個 'HPpoint'這組「columA的價值觀和總結了「HP」值,但這並沒有工作,返回的列空
df2['HPpoint']=df2.groupby('columA')['HP'].sum()
可以替換這些2行重複代碼用'dfrank [ 'HP']的= 26 - dfrank.value'或相似。無需爲每個號碼分別設置不同的案例!至於其他問題,你的問題太複雜了,有太多的子問題和問題,而且你沒有樣本輸入數據。 –
@John Zwinck好點!只是好奇,如果沒有這些條件的模式是否有更簡單的方法?但是當我使用你建議的這種方法時,我仍然收到相同的錯誤信息。 – Jessica
簡化您的代碼。簡化你的問題。把它編輯下來,讓你問一個具體的事情。現在太複雜了。每個職位詢問一件事,而不是三件事。 –