【问题标题】:First n columns data frame前 n 列数据框
【发布时间】:2016-05-02 11:57:14
【问题描述】:

我有一张桌子:

我想切前三列,我该怎么做?

我看过另一个帖子:Finding top N columns for each row in data frame,但这对我来说太过分了。

我试过了:

df1 = df.iloc[:,0:3]

但这给出了错误:IndexingError: Too many indexers

编辑:

添加了ix

的更详细的代码
    cols = [col for col in df.columns if col != 'stream']
    candidates = df.loc[url,cols]

    dfSorted = candidates.sort_values(ascending=False)

    big_three = dfSorted.ix[:,0:3]

【问题讨论】:

  • 你的熊猫版本是什么?我猜想用 .iloc 切片列是后来介绍的。它在 v18.0 上运行良好。如果我没记错的话,.ix 可能适用于早期版本。
  • @ayhan 我有版本 0.17.1
  • @Stanko - print df.indexprint df.columns 是什么?
  • @jezrael 在执行 df.columns 时,我得到:“系列”对象没有属性“列”。那么.loc 返回一个 Series 对象?
  • 是的,问题是dfSortedSerie,而不是DataFrame,所以你不能索引Serie 中的列,因为没有列。

标签: python pandas


【解决方案1】:

我认为您可以使用applynlargest 来选择3 的顶部列和DataFrame candidates 的值:

import pandas as pd

df = pd.DataFrame({'A': {'a': 1, 'c': 5, 'b': 2, 'd': 3}, 
                   'C': {'a': 8, 'c': 7, 'b': 8, 'd': 7}, 
                   'B': {'a': 4, 'c': 1, 'b': 5, 'd': 4}, 
                   'D': {'a': 5, 'c': 3, 'b': 9, 'd': 1}, 
                   'stream': {'a': 1, 'c': 2, 'b': 2, 'd': 3}})
print df
   A  B  C  D  stream
a  1  4  8  5       1
b  2  5  8  9       2
c  5  1  7  3       2
d  3  4  7  1       3


cols = [col for col in df.columns if col != 'stream']
candidates = df.ix['a':'c', cols]

print candidates
   A  B  C  D
a  1  4  8  5
b  2  5  8  9
c  5  1  7  3

print candidates.apply(lambda x: zip(x.nlargest(3).index, x.nlargest(3).values), axis=1)
a    [(C, 8), (D, 5), (B, 4)]
b    [(D, 9), (C, 8), (B, 5)]
c    [(C, 7), (A, 5), (D, 3)]
dtype: object

什么是相同的:

def f(x):
    #print x.nlargest(3)
    #print zip(x.nlargest(3).index, x.nlargest(3).values)
    return zip(x.nlargest(3).index, x.nlargest(3).values)

print candidates.apply(f, axis=1)
a    [(C, 8), (D, 5), (B, 4)]
b    [(D, 9), (C, 8), (B, 5)]
c    [(C, 7), (A, 5), (D, 3)]
dtype: object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2016-03-21
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2021-11-29
    相关资源
    最近更新 更多