使用另一个datafram的唯一值创建和填充数据帧

2024-06-28 11:06:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧df,如下所示:

^{1}$

我想创建一个新的dataframe newdf,它有一列(uentries),其中包含df的唯一条目,以及{}的三列,这取决于{}和{}的条目是否存在于{}中的相应列中。在

因此,我的期望输出如下所示(uentries不需要排序):

^{pr2}$

目前,我是这样做的:

import pandas as pd
import numpy as np

df = pd.DataFrame({'X1': ['a', 'b', 'c', 'd'],
                   'X2': ['c', 'e', 'nan', 'nan'],
                   'X3': ['a', 'c', 'e', 'nan']})

uniqueEntries = set([x for x in np.ravel(df.values) if str(x) != 'nan'])

newdf = pd.DataFrame()
newdf['uentries'] = list(uniqueEntries)

for coli in df.columns:
    newdf[coli] = newdf['uentries'].isin(df[coli])

newdf.ix[:, 'X1':'X3'] = newdf.ix[:, 'X1':'X3'].astype(int)

这给了我想要的输出。在

是否可以更有效地填充newdf?在


Tags: importdataframedfforasnp条目nan
2条回答

您可以将^{}^{}和最后一个^{}^{}一起使用:

import pandas as pd

df = pd.DataFrame({'X1': ['a', 'b', 'c', 'd'],
                   'X2': ['c', 'e', 'nan', 'nan'],
                   'X3': ['a', 'c', 'e', 'nan']})
print df
  X1   X2   X3
0  a    c    a
1  b    e    c
2  c  nan    e
3  d  nan  nan

a = pd.get_dummies(df['X1']).sum()
b = pd.get_dummies(df['X2']).sum()
c = pd.get_dummies(df['X3']).sum()

print pd.concat([a,b,c], axis=1, keys=['X1','X2','X3']).fillna(0)
     X1  X2  X3
a     1   0   1
b     1   0   0
c     1   1   1
d     1   0   0
e     0   1   1
nan   0   2   1

如果在测试数据中使用np.nan

^{pr2}$

这是一种使用pd.value_counts来解决这个问题的简单方法。在

newdf = df.apply(pd.value_counts).fillna(0)
newdf['uentries'] = newdf.index
newdf = newdf[['uentries', 'X1','X2','X3']]
newdf

uentries X1 X2 X3
a   a   1   0   1
b   b   1   0   0
c   c   1   1   1
d   d   1   0   0
e   e   0   1   1
nan nan 0   2   1

然后您可以只删除具有nan值的行:

^{pr2}$

相关问题 更多 >