Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 使用pandas将新数据帧索引到新列中_Python_Python 3.x_Pandas_Numpy - Fatal编程技术网

Python 使用pandas将新数据帧索引到新列中

Python 使用pandas将新数据帧索引到新列中,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我需要通过选择多个列,并将这些列值附加到一个新列,并将其相应的索引作为一个新列,从现有的数据框创建一个新的数据框 假设我将其作为数据帧: A B C D E F 0 1 2 3 4 0 0 7 8 9 1 0 0 4 5 2 4 0 通过选择列B到列E将其转换为: A index_value 1 1 7 1 4 1 2 2 8 2 5 2 3 3 9 3 2 3 4 4 1 4 4 4 因此,对于新数据帧,列A将是旧数据帧中列B到E的所有值,列索引值将对应于所选列的索引值[从零开始] 我搔了

我需要通过选择多个列,并将这些列值附加到一个新列,并将其相应的索引作为一个新列,从现有的数据框创建一个新的数据框

假设我将其作为数据帧:

A B C D E F
0 1 2 3 4 0
0 7 8 9 1 0
0 4 5 2 4 0
通过选择列B到列E将其转换为:

A index_value
1 1
7 1
4 1
2 2
8 2
5 2
3 3
9 3
2 3
4 4
1 4
4 4
因此,对于新数据帧,列
A
将是旧数据帧中列
B到E的所有值,列
索引值
将对应于所选列的索引值[从零开始]

我搔了好几个小时的头。任何帮助都将不胜感激,谢谢

Python3,使用pandas和numpy库。

尝试使用:

df = pd.melt(df[['B', 'C', 'D', 'E']])
# Or df['variable'] = df[['B', 'C', 'D', 'E']].melt()
df['variable'].shift().eq(df['variable'].shift(-1)).cumsum().shift(-1).ffill()
print(df)
输出:

    variable  value
0        1.0      1
1        1.0      7
2        1.0      4
3        2.0      2
4        2.0      8
5        2.0      5
6        3.0      3
7        3.0      9
8        3.0      2
9        4.0      4
10       4.0      1
11       4.0      4
尝试使用:

df = pd.melt(df[['B', 'C', 'D', 'E']])
# Or df['variable'] = df[['B', 'C', 'D', 'E']].melt()
df['variable'].shift().eq(df['variable'].shift(-1)).cumsum().shift(-1).ffill()
print(df)
输出:

    variable  value
0        1.0      1
1        1.0      7
2        1.0      4
3        2.0      2
4        2.0      8
5        2.0      5
6        3.0      3
7        3.0      9
8        3.0      2
9        4.0      4
10       4.0      1
11       4.0      4

这只是
melt

df.columns = range(df.shape[1])
s = df.melt().loc[lambda x : x.value!=0]
s
    variable  value
3          1      1
4          1      7
5          1      4
6          2      2
7          2      8
8          2      5
9          3      3
10         3      9
11         3      2
12         4      4
13         4      1
14         4      4

这只是
melt

df.columns = range(df.shape[1])
s = df.melt().loc[lambda x : x.value!=0]
s
    variable  value
3          1      1
4          1      7
5          1      4
6          2      2
7          2      8
8          2      5
9          3      3
10         3      9
11         3      2
12         4      4
13         4      1
14         4      4


谢谢,这是一个愚蠢的问题,但是我可以使用
df=pd.melt(df.iloc[:,[1,4])
作为选择列[1,2,3,4]的方法吗根据他们的索引?@TylerWayne是的,那也行得通。如果他们的答案有效,别忘了接受我或WenYoBen的答案。
0,1.0 1,2.0 2,3.0 3,4.0 4,5.0 5,6.0 6,7.0 7,8.0 8,9.0
我相信可能没有正确选择专栏,会很快更新,愚蠢的问题,但我可以使用
df=pd.melt(df.iloc[:,[1,4])
作为选择列[1,2,3,4]的方法根据他们的索引?@TylerWayne是的,也行得通。别忘了接受我或WenYoBen的答案,如果他们行得通的话,
0,1.01,2.02,3.03,4.04,5.05,6.06,7.07,8.08,9.0
我相信可能没有正确选择这些列,会很快更新。我尝试过这个,显然我做不到
df=df.loc[:,start\u column:end\u column].stack().sort_index(level=1)。reset_index(level=0,drop=True)。to_frame()
因为我正在尝试
df.loc[:,9:15]
按索引选择列
9,10,11,12,13,14,15
。我如何按索引选择列,并且仍能正常工作?在我的实际csv文件中,没有任何标题可供选择,因为它们都是整数。参考:
类型错误:无法使用这些索引器对其进行切片索引[9]of
如果要使用数字索引,请尝试iloc[]而不是loc[],我在代码中使用了loc[],因为我是按名称引用列的。“B”而不是1。出于某种原因,索引值从3开始。我选择iloc[9:15],输出不应该从9开始,然后以数字形式增加到15?loc[a:B,c:d]表示选择行a到b和列c到d。loc[:,c:d]表示选择所有行和列c到d。我喜欢的是相同的,但基于索引。你想选择什么?所以,我尝试了这个,显然我做不到
df=df.loc[:,start\u column:end\u column].stack()。排序\u索引(level=1)。重置\u索引(level=0,drop=True)。到\u frame()
因为我正在尝试
df.loc[:,9:15]
按索引选择列
9,10,11,12,13,14,15
。我如何按索引选择列,并且仍能正常工作?在我的实际csv文件中,没有任何标题可供选择,因为它们都是整数。参考:
类型错误:无法使用这些索引器对其进行切片索引[9]of
如果要使用数字索引,请尝试iloc[]而不是loc[],我在代码中使用了loc[],因为我是按名称引用列的。“B”而不是1。出于某种原因,索引值从3开始。我选择iloc[9:15],输出不应该从9开始,然后以数字形式增加到15?loc[a:B,c:d]表示选择行a到b和列c到d。loc[:,c:d]表示选择所有行和列c到d。I love是相同的,但基于索引。您试图选择什么?