Pandas 根据复杂条件查找pd.df中的行
我的df看起来像这样:Pandas 根据复杂条件查找pd.df中的行,pandas,numpy,python-3.6,Pandas,Numpy,Python 3.6,我的df看起来像这样: code date type strike settlement id 1195001 CBT_21_G2012_S 2012-01-04 P 101.50 0.015625 1195093 CBT_21_G2012_S 2012-01-04 C 101.50 28.8
code date type strike settlement
id
1195001 CBT_21_G2012_S 2012-01-04 P 101.50 0.015625
1195093 CBT_21_G2012_S 2012-01-04 C 101.50 28.890625
1194926 CBT_21_G2012_S 2012-01-04 C 102.00 28.390625
1194944 CBT_21_G2012_S 2012-01-04 C 102.50 27.906250
1195109 CBT_21_G2012_S 2012-01-04 P 102.50 0.015625
1194905 CBT_21_G2012_S 2012-01-04 C 103.00 27.406250
1195008 CBT_21_G2012_S 2012-01-04 P 103.50 0.015625
1195123 CBT_21_G2012_S 2012-01-04 C 103.50 26.906250
1194908 CBT_21_G2012_S 2012-01-04 C 104.00 26.390625
1194980 CBT_21_G2012_S 2012-01-04 C 104.50 25.890625
1195025 CBT_21_G2012_S 2012-01-04 P 104.50 0.015625
1194981 CBT_21_G2012_S 2012-01-04 P 105.00 0.015625
1195063 CBT_21_G2012_S 2012-01-04 C 105.00 25.390625
1194960 CBT_21_G2012_S 2012-01-04 C 105.50 24.890625
1195102 CBT_21_G2012_S 2012-01-04 P 105.50 0.015625
1194989 CBT_21_G2012_S 2012-01-04 C 106.00 24.390625
对于相同的代码、日期和行号,我需要找到只有type=='p'或type=='C'的行
所需输出应为:
code date type strike settlement
id
1194926 CBT_21_G2012_S 2012-01-04 C 102.00 28.390625
1194905 CBT_21_G2012_S 2012-01-04 C 103.00 27.406250
1194908 CBT_21_G2012_S 2012-01-04 C 104.00 26.390625
1194989 CBT_21_G2012_S 2012-01-04 C 106.00 24.390625
[编辑]
另外,如何在生成的df中翻转'type'C'和'P'(将'C'替换为'P','P'替换为'C')
任何帮助都将是非常宝贵的
提前感谢。使用并通过1
与(==
)进行比较,最后一个筛选依据:
详细信息:
print (df.groupby(['code', 'date', 'strike'])['type'].transform('nunique'))
id
1195001 2
1195093 2
1194926 1
1194944 2
1195109 2
1194905 1
1195008 2
1195123 2
1194908 1
1194980 2
1195025 2
1194981 2
1195063 2
1194960 2
1195102 2
1194989 1
Name: type, dtype: int64
编辑:对于交换值,使用字典映射:
df['type'] = df['type'].map({'C':'P', 'P':'C'})
print (df)
code date type strike settlement
id
1194926 CBT_21_G2012_S 2012-01-04 P 102.0 28.390625
1194905 CBT_21_G2012_S 2012-01-04 P 103.0 27.406250
1194908 CBT_21_G2012_S 2012-01-04 P 104.0 26.390625
1194989 CBT_21_G2012_S 2012-01-04 P 106.0 24.390625
我能再问一个问题吗?将添加到原始question@steff-当然,没问题。@steff-对不起,我的同事来找我了。使用
df['type']=df['type'].map({'C':'P','P':'C'})
df['type'] = df['type'].map({'C':'P', 'P':'C'})
print (df)
code date type strike settlement
id
1194926 CBT_21_G2012_S 2012-01-04 P 102.0 28.390625
1194905 CBT_21_G2012_S 2012-01-04 P 103.0 27.406250
1194908 CBT_21_G2012_S 2012-01-04 P 104.0 26.390625
1194989 CBT_21_G2012_S 2012-01-04 P 106.0 24.390625