2024-10-03 23:27:08 发布
网友
假设我有
ID A1 B1 A2 B2 1 3 4 5 6 2 7 8 9 10
我想使用熊猫堆栈,并希望实现这样的东西
ID A B 1 3 4 1 5 6 2 7 8 2 9 10
但我得到的是
ID A B 1 3 4 2 7 8 1 5 6 2 9 10
这就是我用的
df.stack().reset_index().
使用Stack有可能实现这样的功能吗?^pandas中的{}方法可以做到这一点,但是如果可能的话,我想使用pandasstack()来实现,有什么想法吗?你知道吗
pandas
stack()
您可以使用^{}:
pd.wide_to_long(df, ['A','B'], 'ID', 'value', sep='', suffix='.+')\ .reset_index()\ .sort_values('ID')\ .drop('value', axis=1)
输出:
ID A B 0 1 3 4 2 1 5 6 1 2 7 8 3 2 9 10
更有趣的方式
s.groupby(s.columns.str[0],axis=1).agg(lambda x : x.values.tolist()).stack().apply(pd.Series).unstack(0).T.reset_index(level=0,drop=True) Out[90]: A B ID 1 3 4 2 7 8 1 5 6 2 9 10
通过拆分现有列名来创建一个新的columns对象。这是理所当然的,我们有一个字符的字母后面跟着一个数字。你知道吗
columns
d = df.set_index('ID') d.columns = d.columns.map(tuple) d.stack().reset_index('ID') ID A B 1 1 3 4 2 1 5 6 1 2 7 8 2 2 9 10
一行
df.set_index('ID').rename(columns=tuple).stack().reset_index('ID')
更一般化
d = df.set_index('ID') s = d.columns.str d.columns = [ s.extract('^(\D+)', expand=False), s.extract('(\d+)$', expand=False) ] d.stack().reset_index('ID')
您可以使用^{} :
输出:
更有趣的方式
通过拆分现有列名来创建一个新的
columns
对象。这是理所当然的,我们有一个字符的字母后面跟着一个数字。你知道吗一行
更一般化
相关问题 更多 >
编程相关推荐