我的数据框看起来像这样:
df = pd.DataFrame(np.nan, index=[0,1,2,3], columns=['A','B','C'])
df.iloc[0,0] = 'a'
df.iloc[1,0] = 'b'
df.iloc[1,1] = 'c'
df.iloc[2,0] = 'b'
df.iloc[3,0] = 'c'
df.iloc[3,1] = 'b'
df.iloc[3,2] = 'd'
df
out : A B C
0 a NaN NaN
1 b c NaN
2 b NaN NaN
3 c b d
我想在其中添加新列,其中的名称是数据框内的值(此处为'a'
,'b'
,'c'
和'd'
)。这些列是二进制的,并反映值'a'
,'b'
,'c'
和'd'
是否在行中。
在一张图片中,我想要的输出是:
A B C a b c d
0 a NaN NaN 1 0 0 0
1 b c NaN 0 1 1 0
2 b NaN NaN 0 1 0 0
3 c b d 0 1 1 1
为此,我首先创建用零填充的列:
cols = pd.Series(df.values.ravel()).value_counts().index
for col in cols:
df[col] = 0
(它不按正确的顺序创建列,但这无关紧要)
然后我......在行和列上使用循环......
for row in df.index:
for col in cols:
if col in df.loc[row].values:
df.ix[row,col] = 1
你会明白为什么我正在寻找另一种方法,即使我的数据帧相对较小(76k行),它仍然需要大约8分钟,这太长了。
有什么想法吗?
答案 0 :(得分:3)
您正在寻找 <activity
android:name="com.package name.your activity"
android:theme="@style/AppTheme">
</activity>
。在这里,我选择使用get_dummies
version:
.str
输出:
df.fillna('', inplace=True)
(df.A + '|' + df.B + '|' + df.C).str.get_dummies()