【问题标题】:How to extract set of rows having same value in one column and oppostite in second column in Python如何在Python的一列中提取具有相同值而在第二列中相反的行集
【发布时间】:2019-08-17 12:56:13
【问题描述】:

我有一个这样的数据框

日期 A B 统计数据
1 月 1 日开始
1-jan K 0 0
1 月 1 日 T b 开始
1-jan 结束
1 月 1 日 W 0 0
1-jan R b 结束

实际上,a 和 b 表示以 start 开头并以 Stat 列的 end 值结束的活动。 Act 列代表活动编号。我想基于 BStat 列创建一个新的数据框,这样我的输出将是:

日期 A B 统计数据 行动
1-jan M a 开始 1
1-jan K 0 0 1
1 月 1 日 T b 开始 1
1-jan N a 结束 1
1-jan T b 开始 2
1-jan N a end 2
1-jan W 0 0 2
1-jan R b end 2

Act 列代表活动编号。任何帮助将不胜感激。

【问题讨论】:

  • 你的 b 开始和结束开关是如何在输出中放置的?
  • @kztd 谢谢。但实际上我需要一个从第一行开始的循环,将其索引与列 B(例如 a)和 Stat(例如 start)的值一起存储。然后检查下一行(即 a)中 B 列中的相同值,但具有相反的 Stat 值(即结束)。因此,当找到时,提取行集并将其命名为 Act 1。同样,取第二行并检查 B 列中的相似值与 Stat 列中的相反值,然后将其保存为 Act 2,依此类推。

标签: pandas dataframe python-2.7 loops


【解决方案1】:

听起来你正在寻找 cumsum on 'start' 出现在 Stat 列中。 和this question差不多

cols = ["Date", "A", "B", "Stat"]
strs = ["1-jan M a start",
"1-jan K 0 0",
"1-jan T b start",
"1-jan N a end",
"1-jan W 0 0",
"1-jan R b end"
       ]

list = []
for str in strs:
    items = str.split(" ")
    list.append(items)
print(list)
df = pd.DataFrame(list, columns=cols)
df["StartCount"] = (df['Stat'] == 'start').cumsum()
print(df)

>

    Date  A  B   Stat  StartCount
0  1-jan  M  a  start           1
1  1-jan  K  0      0           1
2  1-jan  T  b  start           2
3  1-jan  N  a    end           2
4  1-jan  W  0      0           2
5  1-jan  R  b    end           2

【讨论】:

  • 谢谢。但很抱歉问题仍未解决。我希望第一行和最后一行具有相同列 B 值但列 Stat 值相反的一组行的值 1。
猜你喜欢
  • 2016-04-25
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多