【发布时间】:2022-02-21 17:50:15
【问题描述】:
我有一个巨大的df,看起来像这样:
| date | stock1 | stock2 | stock3 | stock4 | stock5 | stock6 | stock7 | stock8 | stock9 | stock10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 10/20 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 0.9 |
| 11/20 | 0.8 | 0.9 | 0.3 | 0.4 | 0.3 | 0.5 | 0.3 | 0.2 | 0.4 | 0.1 |
| 12/20 | 0.3 | 0.6 | 0.9 | 0.5 | 0.6 | 0.7 | 0.8 | 0.7 | 0.9 | 0.1 |
我想为每一行找出股票价值高 20% 和低 20%。输出应该是:
| date | higher | lower |
|---|---|---|
| 10/20 | stock9, stock 10 | stock1, stock 2 |
| 11/20 | stock1, stock 2 | stock8, stock 10 |
| 12/20 | stock3, stock 9 | stock1, stock 10 |
我的代码现在看起来像这样:
l= df.count(1)
rank = pd.DataFrame()
for i in len(l):
rank[i, "winners"] = df.apply(lambda x: x.nlargest(round(l[i-1]*0.2).index.tolist(), axis=1)
rank[i, "losers"] = df.apply(lambda x: x.nsmallest(round(l[i-1]*0.2).index.tolist(), axis=1)
我收到错误“TypeError: 'int' object is not callable”。我检查了 l 的 dtype:频率:M,长度:344,dtype:float64。 我做错了什么?
【问题讨论】:
-
df(lambda x:有错别字,需要df.apply(lambda x: -
我刚看到我并在帖子中更正。不过,我的错字不正确。
-
范围(len(l))...
-
和以前一样的错误
标签: python pandas for-loop rounding