Python 基于数据框中特定列中的值提取列值

Python 基于数据框中特定列中的值提取列值,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据帧,dx1-dx99有99列,px1-px99有99列,mort有一列: dx1 dx2 dx3 . dx99 px1 px2 . px99 mort E10 I12 E10 N18 R18 0FY 0TY 0DN 0DN 1 E10 I12 I31 E44 N17 0FY 0TY 0FT 5A1 0 E10 I12 N17 T86 T86 0TY 0FY 0DT 0 I12 E10 N18 A04

我有一个数据帧,dx1-dx99有99列,px1-px99有99列,mort有一列:

dx1 dx2 dx3 .   dx99    px1 px2 .   px99    mort
E10 I12 E10 N18 R18     0FY 0TY 0DN 0DN      1
E10 I12 I31 E44 N17     0FY 0TY 0FT 5A1      0
E10 I12 N17 T86 T86     0TY 0FY 0DT          0
I12 E10 N18 A04         0TY 0FY 0DT 0T7      1
E10 I12 E10 N18 Z99     0TY 0FY              0
E10 N18 Z76             0FY 0TY 04Q 0D1      1
E10 N18 Z99 N25 E78     0TY 0FY 0WP          0
我想保留dx-dx99&px-px99中的所有值,其中匹配行中的值mort=1,否则将它们设置为零。然后计算剩余代码的出现频率

我试过这个:

dx = df.loc[:,'dx1':'dx99']
X1pr = df.loc[:,'px1':'px99']
dx = dx.fillna(0)    
X1p = X1pr.fillna(0)
death = df.loc[:,'mort']
df1 = pd.concat([dx, X1p, death], axis=1)

N = len(df1.columns)
keep = df1.iloc[:,-(N-1):].isin(["1"]).values

df1.iloc[:,:N-1] = df1.iloc[:,:N-1].where(keep, 0)
X1d = df1.[df1.columns[0:N-1]]

mat = X1d.as_matrix(columns=None)
values, counts = np.unique(mat.astype(str), return_counts=True)
matrix = []
for v,c in zip(values, counts):
    matrix.append( [v,c])

icd9_counted_d = pd.DataFrame(matrix, columns = ['ICD_code', 'DEATHS'])
我在死亡专栏里一无所获。有什么想法吗?

IIUC:

In [31]: x.loc[x.mort != 1, x.columns != 'mort'] = ''

In [32]: x
Out[32]:
   dx1  dx2  dx3  dx4 dx99  px1  px2  px3 px99  mort
0  E10  I12  E10  N18  R18  0FY  0TY  0DN  0DN     1
1                                                  0
2                                                  0
3  I12  E10  N18  A04  NaN  0TY  0FY  0DT  0T7     1
4                                                  0
5  E10  N18  Z76  NaN  NaN  0FY  0TY  04Q  0D1     1
6                                                  0

你能发布你想要的数据集吗?即使我把mort转换成数字类型,它对我也不起作用。在这个操作之后,我得到了除mort之外的所有空列。@Sanoj,这就是我理解你的问题的方式。请阅读并更新您的问题。我感谢您的回答。在我的例子中,“mort”作为数据类型“object”出现。我以为x.mort!=1条件失败。因此,我使用convert_对象函数将x.mort转换为数值类型。我可以看到它被转换成了数字类型。静止状态x.mort!=1失败,并且我没有得到带有代码的第0、3、5行,正如您在上面的示例中所示。我得到的都是空的。@Sanoj,如果
mort
object
dtype,您只需使用:
x.mort!='1'
作为一个条件-这不是什么大问题。但问题是我的答案中的输出是否是您想要的数据集?