我有这个数据框df2
:
date kind sector
0 2017-02-01 P A
1 2017-02-01 P A
2 2017-02-01 L A
3 2017-02-01 G A
4 2017-02-01 P B
5 2017-02-01 P B
6 2017-02-01 L B
7 2017-02-01 T B
8 2017-02-02 P A
9 2017-02-02 P A
10 2017-02-02 L A
11 2017-02-02 T A
12 2017-02-02 A B
13 2017-02-02 P B
14 2017-02-02 L B
15 2017-02-02 L B
我正在尝试使用pd.dummies创建两个新列,Open
和Close
,这些列将基于kind
值。如果kind
= P
,那么Close
值将为1
;对于所有其他值,“关闭”值将为“0”。另一方面,'开放'将是相反的;对于除'P'之外的所有值,open
的值为1.
所以我正在寻找这样的输出:
date kindSectClose Open
0 2017-02-01 P A 1 0
1 2017-02-01 P A 1 0
2 2017-02-01 L A 0 1
3 2017-02-01 G A 0 1
4 2017-02-01 P B 1 0
5 2017-02-01 P B 1 0
6 2017-02-01 L B 0 1
7 2017-02-01 T B 0 1
8 2017-02-02 P A 1 0
9 2017-02-02 P A 1 0
10 2017-02-02 L A 0 1
11 2017-02-02 T A 0 1
12 2017-02-02 A B 0 1
13 2017-02-02 P B 1 0
14 2017-02-02 L B 0 1
15 2017-02-02 L B 0 1
我正在尝试使用pd.dummies 在一行中执行此,但无法使其正常工作。
我正在尝试通过布尔过滤创建临时列,然后将该列用作pd_get_dummies的基础,这将创建两个新列;我要重命名。
pd.get_dummies(df2, column =[df2.kind.apply(lambda x: int(x=='P')).rename(columns ={0: 'Open', 1:'Close'})])
是否可以在一个班轮中完成此操作?
答案 0 :(得分:1)
以下是否符合您的需求:
df2 = pd.concat([df2,pd.get_dummies(df2['kind'].apply(lambda x: 'P' if x=='P' else 'N')).rename(columns={'P':'Close','N':'Open'},inplace=False)],axis=1)
答案 1 :(得分:1)
这个怎么样?这是你想要的 ?
import pandas as pd
df = pd.DataFrame({
'date': ['2017-02-01', '2017-03-01', '2017-04-01' ,'2017-05-01'],
'kind': ['P','A','A','P']
})
df['Open'], df['Close'] = (df['kind'] =='P' ).astype(int) , (df['kind'] !='P' ).astype(int)
print df
df
date kind Open Close
0 2017-02-01 P 1 0
1 2017-03-01 A 0 1
2 2017-04-01 A 0 1
3 2017-05-01 P 1 0