pandas 怎麼根據一列的數據的值的情況判斷來生成另外一列的數值?
我是一個python的初學者。現在在學習pandas。 通過tushare 導入的數據後,想根據p_change列的與0的大小關係來生成新的一列『漲跌』。 大於0時為漲, 等於0時為平,小於0時為跌。
求大神現身說法!!
樓上的解決方案不錯,下面給個稍微易讀一點的版本:
def number_to_flag(number):
if number &> 0:
return "漲"
elif number == 0:
return "平"
else:
return "跌"
df["漲跌"] = df["p_change"].map(number_to_flag)
由於寢室里沒搭建 pandas 環境,代碼沒有實測,你可以測試一下。基本思路就是使用 Series 的 map 方法,將每一個元素都變換為 number_to_flag 函數返回值。給 DataFrame 指定一個不存在的索引則相當於創建一個新值。
另外學習 pandas 怎麼能錯過這本書:《Python for Data Analysis》?下載地址:Python_for_Data_Analysis.pdf_微盤下載
看完這本書後有一個實戰項目,使用 pandas,matplotlib 分析 tweeter 數據的:Analyzing Big Data with Python PANDAS,地址:Analyzing Big Data with Python PANDAS,訪問慢的話請搭建梯子。
完成這兩項任務後基本的數據分析需求應該都能滿足了。
送給懶得自己寫函數的人
import numpy as np
df["漲跌"] = np.sign(df["p_change"])
df["漲跌"].replace([-1,0,1], ["跌","平","漲"], inplace = True)
df["漲跌"] = map(lambda x: "漲" if x&>0 else ("跌" if x&<0 else "平" ) , df["p_change"])
沒測試
謝謝
# map with dict
flag = {-1:"跌",0:"平",1:"漲"}
df["flag"] = sign(df["p_change"]).map(flag)
# Ye Lu Zi
flag = ["跌","平","漲"]
df["flag"] = [flag[int(i)] for i in 1 + sign(df["p_change"])]
推薦閱讀:
※如何批量獲取年報中數據?
※Python的大數運算到底是根據什麼基礎原理或者演算法實現的?
※將來 UWP 會不會支持 python?
※哪些簡單的linux或者python技能,能直接用在生活上讓周圍人刮目相看?
※就目前就業形勢和今後發展 PHP和Python作為後台開發語言哪一個更合適?
TAG:Python |