Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列传递给新数据框中的行?_Python_Pandas - Fatal编程技术网

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