如果我有数据框,并且我需要对给定列执行某些操作并生成新列,那么有比下面的函数更好的方法吗?
我不想改变原始列。我想继续为此和任何类似操作添加新列。
但是在下面的代码中,似乎有太多行。也就是说,pandas中的rank()函数非常方便。在我看来应该有一些参数在某个地方对数据框说:“嘿,应用你已经知道的这个函数,但是不要像原来那样对原始列进行操作,而是在最后使它成为一个新列数据框“
有这样的方式吗?或者有没有办法让下面的代码更简洁/更优雅并获得相同的结果?我刚才看起来很冗长。我也做其他事情,例如我对cut()有相同类型的功能。我会为其他一些操作做这件事。似乎很常见,应该更容易。
谢谢!
def rank(pdfAll, nOldColIndex, sNewColName, sMethod, bAsc):
"""Appends a ranked column to a DataFrame based on an existing column.
nOldColIndex is the index of the column with the original data.
sNewColName is the name of the new column.
sMethod goes to the pandas rank function to influence ranking behavior.
bAsc goes to the pandas rank function to influence ranking behavior.
pdfAll[nOldColIndex] must have numeric contents.
"""
serOldCol = pdfAll.ix[:,nOldColIndex]
serOldCol.name = sNewColName
serNewCol = serOldCol.rank(method=sMethod, ascending=bAsc)
pdfNewCol = pd.DataFrame(serNewCol)
pdfAll = pd.merge(pdfAll, pdfNewCol, left_index=True, right_index=True)
return pdfAll
答案 0 :(得分:2)
我不确定这种概括是什么,但你是否有机会尝试做某事
df['newColumn'] = df.oldColumn.rank()
对函数进行概括,如果你想要按行执行某些操作,可以执行
df.apply(lambda x: x.oldColumn * x.otherOldColumn, axis=1)