Python Pandas Dataframe:如何同时将多个索引附加到列表中?
Posted
技术标签:
【中文标题】Python Pandas Dataframe:如何同时将多个索引附加到列表中?【英文标题】:Python Pandas Dataframe: How to append more than one index to a list at the same time? 【发布时间】:2021-04-26 18:03:45 【问题描述】:用我认为更容易理解的问题重写。
我认为问题在于,不能一次将多个项目附加到列表中。
想象一下使用 df.iloc[3:6] ,但实际上是: myList.append(开始:完成)
伪代码
# looping through an index and adding something to it when true
for (x)each index in the index:
if condition is true:
myList.append(x)
以下代码有效,但效率低下
# looping through an index and adding something to it when true
for (x)each index in the index:
if condition is true:
myList.append(x),myList.append(x+1),myList.append(x+2)
我想做什么
# looping through an index and adding something to it when true
for (x)each index in the index:
if condition is true:
myList.append(x -> x+2) #myList.append(x+1),myList.append(x+2)
# so I want: myList.append(x to x+1 to x+2)
# but without having to keep writing x+this , x+that ...
而不是这个
myList.append(x)、myList.append(x+1)、myList.append(x_2)(等)
我希望能写出一样的
myList.append(这个位置 -> 中间的数字 AND -> 最终位置)
如果不够清楚,我很抱歉,我会写意大利面条代码,直到我弄明白为止
【问题讨论】:
你能分享一个示例输入数据帧和一个预期的输出数据帧吗? 我将编辑我的问题添加示例 请阅读How to create a Minimal, Reproducible Example 很多加入SO的人都有同样的问题。它不只是你。很难将一个大问题分解为一个小问题,但为了其他可以帮助的人,这是必要的。我已经提供了相同的链接。您可以创建一个具有相同操作但有 10 行的虚拟表。写出预期的输出。 也检查第一条评论,它被投了 4 次并且要求相同,而且有充分的理由。你确实有一个很好的问题,一个复杂的问题。但您是否能够简化它以便其他人可以帮助解决它。 【参考方案1】:IIUC:
a = []
g = lambda x,y: list(range(x,x+y))
a.append(g(7,4))
a.append(g(11,4))
一个:
[[7, 8, 9, 10], [11, 12, 13, 14]]
如果我正确理解您的情况n
连续行其中值增加(x1<x2<x3<x4)
此解决方案将有所帮助:
https://***.com/a/65090526/6660373
您需要根据您的要求进行修改。
借用那个答案的代码:
# Is the current "Close" increasing or same (compared with previous row)
df['incr'] = df.Close >= df.Close.shift(fill_value=0)
# Generate the result column
df['DaysDecr'] = df.groupby(df.incr.cumsum()).apply(
lambda grp: (~grp.incr).cumsum()).reset_index(level=0, drop=True)
df.drop(columns='incr', inplace=True)
N=3
idx = df.loc[(df['DaysDecr'].rolling(window=N , min_periods=N)\
.apply(lambda x: (x==0).all()).eq(1))].index
f = lambda x: list(range(x-N+1,x+1))
for i in idx:
print(f(i)) # <--------- here is your indices where the condition is satisfied
[0, 1, 2]
df:
Date Close incr DaysDecr
0 2015-11-27 105.449997 True 0
1 2015-11-30 106.239998 True 0
2 2015-12-01 107.120003 True 0
3 2015-12-02 106.070000 False 1
4 2015-12-03 104.379997 False 2
5 2020-11-18 271.970001 True 0
6 2020-11-19 272.940002 True 0
7 2020-11-20 269.700012 False 1
8 2020-11-23 268.429993 False 2
9 2020-11-24 276.920013 True 0
【讨论】:
太棒了,就是这样!非常感谢:D @helloworldnoob:不要迭代数据框(For循环),就这样做。如果我理解这个问题,那么您希望拥有满足我在回答中提到的条件的索引。 我会试试的,再次感谢。现在 lambda 函数确实有问题,因为在使用 mplfinance.plot 可视化数据的用例中,lambda 函数现在输出 [[numbers],[numbers]] (列表列表?)但它看起来像您示例中的其他代码将解决此问题 您也可以展平列表。但我不知道要求,所以给了你可以根据需要修改的解决方案。 太棒了,非常感谢:)以上是关于Python Pandas Dataframe:如何同时将多个索引附加到列表中?的主要内容,如果未能解决你的问题,请参考以下文章
如何用pandas将某列one-hot编码后,修改原dataframe
python pandas groupby分组后的数据怎么用