当前位置: 首页 > 面试题库 >

将列值更改为pandas中的列标题

百里沛
2023-03-14
问题内容

我有以下代码,该代码将pandas数据框的一列中的值用作新数据框的列。数据框第一列中的值成为新数据框的索引。

从某种意义上说,我想将一个邻接表转换成一个邻接矩阵。这是到目前为止的代码:

import pandas as pa
print "Original Data Frame"
# Create a dataframe
oldcols = {'col1':['a','a','b','b'], 'col2':['c','d','c','d'], 'col3':[1,2,3,4]}
a = pa.DataFrame(oldcols)
print a

# The columns of the new data frame will be the values in col2 of the original
newcols = list(set(oldcols['col2']))
rows = list(set(oldcols['col1']))

# Create the new data matrix
data = np.zeros((len(rows), len(newcols)))

# Iterate over each row and fill in the new matrix
for row in zip(a['col1'], a['col2'], a['col3']):
    rowindex = rows.index(row[0])
    colindex = newcols.index(row[1])
    data[rowindex][colindex] = row[2]

newf = pa.DataFrame(data)
newf.columns = newcols
newf.index = rows

print "New data frame"
print newf

这适用于此特定实例:

Original Data Frame
  col1 col2  col3
0    a    c     1
1    a    d     2
2    b    c     3
3    b    d     4
New data frame
   c  d
a  1  2
b  3  4

如果col3中的值不是数字,它将失败。我的问题是,是否有更优雅/更稳健的方式来做到这一点?


问题答案:

这看起来像是枢轴工作:

import pandas as pd
oldcols = {'col1':['a','a','b','b'], 'col2':['c','d','c','d'], 'col3':[1,2,3,4]}
a = pd.DataFrame(oldcols)

newf = a.pivot(index='col1', columns='col2')
print(newf)

产量

      col3   
col2     c  d
col1         
a        1  2
b        3  4

如果您不希望使用MultiIndex列,则可以删除col3using:

newf.columns = newf.columns.droplevel(0)

然后会产生

col2  c  d
col1      
a     1  2
b     3  4


 类似资料:
  • 我想将一个表(表示为列表的列表)转换为。作为一个极其简化的例子: 将列转换为适当类型的最佳方法是什么,在本例中,列2和列3转换为浮点?在转换为DataFrame时是否有方法指定类型?还是先创建DataFrame,然后循环遍历列以更改每列的类型更好?理想情况下,我希望以动态的方式执行此操作,因为可以有数百个列,而我不想确切地指定哪些列属于哪种类型。我所能保证的是每列都包含相同类型的值。

  • 如果我想将一个名为“maximum_num”的新列突变到x上,其值为5.1,4.9,4.7等,我该怎么做?(我意识到糟糕的例子,因为这里都是Sepal.Length,但如果最大值每次来自不同的cols) 我想我可以用which.max但不知道如何编织。 我也试过 如何追加包含最大行值的新列? 有dplyr esque的方式吗?对base r也很满意。

  • 工作在配置单元表,我需要改变列名如下,它的工作与预期和改变列名,但下划线值该列得到NULL。 这里更改的列名是hdfs_load_date,重命名列名后值为NULL。 有人有办法解决这个问题吗。提前感谢!!

  • 问题内容: 我有以下数据框: 我要这样 堆叠/堆叠似乎不起作用。 问题答案: 您正在寻找: 以及是否要重新排列列:

  • 问题内容: 我试图在事实发生后修改表使其成为主键列。我尝试了以下SQL,但收到语法错误通知。 我做错什么了吗? 问题答案:

  • 问题内容: 我想将表列更改为可为空。我用过了: 这会导致出现错误。正确的语法是什么? 问题答案: 假设(基于您之前的问题): 用您的实际数据类型替换。