如何根据另一列中的条件转置一列?

里沙卜·古普塔(Rishab Gupta)

我敢肯定这是以前被问过的(因为这是一个常见问题),但是我找不到它。

所以我的数据框看起来像这样:

ID     Name
1      A
1      B
2      X
2      Y
2      Z

我想要这种格式(我不在乎列名)

1    A    B
2    X    Y   Z  and so on...
耶斯列尔

创建MultiIndex通过DataFrame.set_index由计数器GroupBy.cumcount和重塑通过Series.unstackDataFrame.reset_index从柱index

df1 = (df.set_index(['ID',df.groupby('ID').cumcount()])['Name']
         .unstack(fill_value='')
         .reset_index())
print (df1)
   ID  0  1  2
0   1  A  B   
1   2  X  Y  Z

小表演DataFrame

np.random.seed(123)
N = 1000
L = list('abcdefghijklmno')
df = pd.DataFrame({'Name': np.random.choice(L, N),
                   'ID':np.random.randint(100, size=N)}).sort_values('ID')
#print (df)

In [15]: %%timeit
    ...: df_new=df.groupby('ID')['Name'].apply(lambda x: ','.join(list(x))).reset_index()
    ...: df_new.join(df_new.pop('Name').str.split(",",expand=True))
    ...: 
22 ms ± 411 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [16]: %%timeit
    ...: df1 = (df.set_index(['ID',df.groupby('ID').cumcount()])['Name']
    ...:          .unstack(fill_value='')
    ...:          .reset_index())
    ...: 
6.05 ms ± 212 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [17]: %%timeit
    ...: df.set_index('ID').groupby('ID').apply(lambda x: x.reset_index(drop=True).T).reset_index(level=1,drop=True)
    ...: 
151 ms ± 1.25 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据一列对数据框进行分组并根据另一列进行转置

如何根据Pandas中另一列的条件比较同一列中的日期?

如何根据条件在熊猫中创建另一列?

将行转置为列,转置后的列根据另一列而变化

如何根据另一列的条件/分组删除一列中的连续重复行?

如何根据条件将一列中的值设置为另一列

如何根据另一列的日期条件更新列?

如何根据另一列的条件创建熊猫列?

根据另一列的条件加入

根据条件将一列中的值替换为另一列中的值

根据条件将一列中的条目替换为另一列中的条目

根据另一列中的条件修改一列中的值的快捷方式

根据R中另一列的条件从一列中删除重复项

如何根据另一列中的条件更改数据框的某一列中的值?

熊猫,根据条件在另一列中搜索结果

根据另一列中的条件填充熊猫

根据另一列中满足的条件进行过滤

如何根据另一列的条件替换一列的NaN值?

如何根据取决于另一列的条件返回一列

如何根据另一列中的值填充另一列中的值?

根据另一列的条件更新Pandas DataFrame中的一列

熊猫根据选择为条件的另一列中的值创建一列

根据条件将值分配给另一列中的一列

根据另一列的条件删除一列中重复的行

根据条件匹配另一列的向量替换一列中的值

根据条件从一列中提取数据并存储在另一列中

如何根据R中的条件将数据从一列复制到另一列?

如何根据R中另一列的条件求和一列的特定单元格?

如何根据另一列更改矩阵中的列