gpt4 book ai didi

python - 如何在 python 中迭代数据帧然后返回行值?

转载 作者:行者123 更新时间:2023-12-01 02:16:52 25 4
gpt4 key购买 nike

我有一个像这样的数据框,

import pandas as pd
d = {'col1': ["2004-02-26", "2004-02-27", "2004-03-01",
"2004-03-02", "2004-03-03", "2004-03-04",
"2004-03-05", "2004-03-08", "2004-03-09",
"2004-03-10", "2004-03-11", "2004-03-12"],
'col2': [-3, 4, 5, 3, -1, 11, 123, 43, -5, 3, -4, -7],
'col3': [0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0,]}
df = pd.DataFrame(data=d)
print(df)

打印出来,

              col1  col2  col3
0 2004-02-26 -3 0
1 2004-02-27 4 1
2 2004-03-01 5 0
3 2004-03-02 3 0
4 2004-03-03 -1 1
5 2004-03-04 11 0
6 2004-03-05 123 0
7 2004-03-08 43 0
8 2004-03-09 -5 0
9 2004-03-10 3 1
10 2004-03-11 -4 1
11 2004-03-12 -7 0

您可以在df['col2']中看到,正值被几个负值分隔。我想选择每组正值的头行和尾行到一个新的数据帧。如果只有一个正行位于负行中间,我认为头和尾是相同的。

例如,

head_date  col2h  co3h    tail_date  col2t  col3t
2004-02-27 4 1 2004-03-02 3 0
2004-03-04 11 0 2004-03-08 43 0
2004-03-10 3 1 2004-03-10 3 1

我在考虑当 col2<0 的第 (i) 行和 col2>0 的第 (i+1) 行时选择行,返回 i+1 行值,以及当 col2 的第 (i) 行时>0 且 col2<0 的第 (i+1) 行,返回第 i 行值。但感觉有点困惑。

我希望我清楚地描述了问题。真心希望有人能帮助我。

最佳答案

类似这样的事情

df1 = df.loc[(df['col2'].shift() < 0) & (df['col2'] > 0)].copy()
df1.rename(columns = {'col1': 'head_date', 'col2': 'col2h', 'col3': 'col3h'}, inplace = True)

df2 = df.loc[(df['col2'].shift(-1) < 0) & (df['col2'] > 0)].copy()
df2.rename(columns = {'col1': 'head_date', 'col2': 'col2t', 'col3': 'col3t'})

new_df = pd.concat([df1.reset_index(drop = True), df2.reset_index(drop = True)], axis = 1)

你得到了

    head_date   col2h   col3h   head_date   col2t   col3t
0 2004-02-27 4 1 2004-03-02 3 0
1 2004-03-04 11 0 2004-03-08 43 0
2 2004-03-10 3 1 2004-03-10 3 1

关于python - 如何在 python 中迭代数据帧然后返回行值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com