Python 我写了一个脚本,它根据一个条件生成一个新的数据帧,如何使它更有效?
这是我的密码Python 我写了一个脚本,它根据一个条件生成一个新的数据帧,如何使它更有效?,python,pandas,dataframe,Python,Pandas,Dataframe,这是我的密码 df = *some df coin = *some string color = 'red' events = pd.DataFrame() events['date'] = df.date events['event'] = np.NaN data_list = [] for i in range(len(df)): if df.iloc[i].color == color: data_list.append(1) else:
df = *some df
coin = *some string
color = 'red'
events = pd.DataFrame()
events['date'] = df.date
events['event'] = np.NaN
data_list = []
for i in range(len(df)):
if df.iloc[i].color == color:
data_list.append(1)
else:
data_list.append(np.NaN)
events['event'] = l
从原始数据帧开始,如果颜色=‘红色’,则新数据帧(事件
)中的相应日期应为1
我知道你可能一行就能做到,但我不知道怎么做
奖金问题执行此操作后,我将索引重置为日期列,这是我以前无法执行的操作,因为iloc无法使用范围I->len(df)
有很多不同的方法可以做到这一点 e、 g.使用列表理解构建一个系列
import pandas as pd
import numpy as np
df = pd.DataFrame({'color' : ['red', 'blue', 'red'],
'date' : ['3/10/17', '4/10/17', '5/10/17']})
color_bools = pd.Series([1 if val == 'red' else np.nan for val in df['color']],
index = df['date'].values)
color_bools
Out[18]:
3/10/17 1.0
4/10/17 NaN
5/10/17 1.0
dtype: float64
有很多不同的方法可以做到这一点 e、 g.使用列表理解构建一个系列
import pandas as pd
import numpy as np
df = pd.DataFrame({'color' : ['red', 'blue', 'red'],
'date' : ['3/10/17', '4/10/17', '5/10/17']})
color_bools = pd.Series([1 if val == 'red' else np.nan for val in df['color']],
index = df['date'].values)
color_bools
Out[18]:
3/10/17 1.0
4/10/17 NaN
5/10/17 1.0
dtype: float64
你需要:
样本:
df = pd.DataFrame({'color' : ['red', 'blue'],
'd' : ['a', 'b']})
print (df)
color d
0 red a
1 blue b
df['event'] = np.where(df.color == 'red', 1, np.nan)
print (df)
color d event
0 red a 1.0
1 blue b NaN
另一个解决方案:
df.loc[df.color == 'red', 'event'] = 1
print (df)
color d event
0 red a 1.0
1 blue b NaN
性能类似:
df = pd.DataFrame({'color' : ['red', 'blue'],
'd' : ['a', 'b']})
df = pd.concat([df]*100000).reset_index(drop=True)
print (df)
In [31]: %timeit df['event1'] = np.where(df.color == 'red', 1, np.nan)
10 loops, best of 3: 23.6 ms per loop
In [32]: %timeit df.loc[df.color == 'red', 'event'] = 1
10 loops, best of 3: 25.4 ms per loop
你需要:
样本:
df = pd.DataFrame({'color' : ['red', 'blue'],
'd' : ['a', 'b']})
print (df)
color d
0 red a
1 blue b
df['event'] = np.where(df.color == 'red', 1, np.nan)
print (df)
color d event
0 red a 1.0
1 blue b NaN
另一个解决方案:
df.loc[df.color == 'red', 'event'] = 1
print (df)
color d event
0 red a 1.0
1 blue b NaN
性能类似:
df = pd.DataFrame({'color' : ['red', 'blue'],
'd' : ['a', 'b']})
df = pd.concat([df]*100000).reset_index(drop=True)
print (df)
In [31]: %timeit df['event1'] = np.where(df.color == 'red', 1, np.nan)
10 loops, best of 3: 23.6 ms per loop
In [32]: %timeit df.loc[df.color == 'red', 'event'] = 1
10 loops, best of 3: 25.4 ms per loop