Python 如何将列传递给新数据框中的行?
我需要基于Python 如何将列传递给新数据框中的行?,python,pandas,Python,Pandas,我需要基于df创建一个新的数据帧new: df = ID GROUP_1 GROUP_2 GROUP_3 COUNT NAME 1 AAA AAA CCC 5 xxx 2 BBB CCC AAA 6 yyy 结果应该是这样的: new = ID GROUP COUNT NAME 1 AAA 5 xxx 1 CCC 5
df
创建一个新的数据帧new
:
df =
ID GROUP_1 GROUP_2 GROUP_3 COUNT NAME
1 AAA AAA CCC 5 xxx
2 BBB CCC AAA 6 yyy
结果应该是这样的:
new =
ID GROUP COUNT NAME
1 AAA 5 xxx
1 CCC 5 xxx
2 BBB 6 yyy
2 CCC 6 yyy
2 AAA 6 yyy
因此,我想将GROUP\u 1
、GROUP\u 2
和GROUP\u 3
的值传递到行中(实际上,我有更多以GROUP\u
开头的列,这就是为什么我更喜欢使用df.filter(regex=“^GROUP”)
)
考虑到数据集相当大(大约1Gb),我如何做到这一点呢?方法1使用
pd.melt
cols = ['ID', 'GROUP', 'COUNT', 'NAME']
pd.melt(
df, ['ID', 'COUNT', 'NAME'],
['GROUP_1', 'GROUP_2', 'GROUP_3'],
value_name='GROUP')[cols]
方法2设置索引
+堆栈
cols = ['ID', 'GROUP', 'COUNT', 'NAME']
df.set_index(['ID', 'COUNT', 'NAME']).stack().reset_index(name='GROUP')[cols]
好极了我知道有一种方法可以避免笨拙的循环和手工伪造。第二种方法可能更灵活。谢谢。如果您能看看我的下一个相关问题(我正在使用您的解决方案),我将不胜感激:
ID GROUP COUNT NAME
0 1 AAA 5 xxx
1 1 AAA 5 xxx
2 1 CCC 5 xxx
3 2 BBB 6 yyy
4 2 CCC 6 yyy
5 2 AAA 6 yyy