- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题 :
我有一个 Pandas 数据框,我试图从中提取特定的行。我感兴趣的行是那些包含日期的行,以及紧跟在带有日期的行之后的行。重要的是,我想将信息从日期后面的行移动到包含日期的行中的新列。通过这样做,我将在同一行上获得“一个人”的信息。明确地说,我想找到包含日期的行,并将信息从日期后面的行移动到新列中包含日期的行。
从这里:
Col0 Col1 Col2 Col3 Col4 Col5
0 NaN NaN NaN NaN NaN
1 *1/23/20 Joe G USA NaN G5 paper
2 NaN get_me NaN NaN NaN
3 +1/5/20 Frank F CAN NaN F4 Paper
4 NaN get_me_2 NaN NaN NaN
对此:
Col0 Col1 Col2 Col3 Col4 Col5 Col6(New column)
0 1/23/20 Joe G USA NaN G5 paper get_me
1 1/5/20 Frank F CAN NaN F4 paper get_me_2
换种说法 :我基本上只是想获取所有日期行以获取下一行的信息,因此对于每个日期都有一个人,然后他们的所有信息都在一行上。如果第二行中的所有信息都在其前一行的同一列中,则可以。
import re
search_in = '*1/4/13'
wanted_regex = r'(\d+/\d+/\d+)'
match = re.search(wanted_regex, search_in)
match.group(1)
输出 :'1/4/13'
def regex_filter(myregex, val):
if val:
mo = re.search(myregex,val)
if mo:
return True
else:
return False
else:
return False
df_filtered =
df[df['col'].apply(regex_filter)]
是什么赋予了? 以上是我相信我正在尝试做的一个很好的例子,但我真的被难住了,我真的不知道我应该如何控制代码中的位置来获取下一行并将其向上移动。我看到很多类似的问题,但我无法确定是否应该分组、过滤、查询...?如果你能提供一个简短的理论,说明你为什么选择你选择的东西来解决这个问题,那么对于将来如何思考这个问题会非常有帮助。这就是我现在所处的位置,可以真正使用一些建议。谢谢你。
最佳答案
首先,从 pandas.Series.str.extract
开始获取类似日期的字符串:
s = df["Col1"].str.extract("(\d+/\d+/\d+)", expand=False)
然后使用
pandas.to_datetime
实际过滤掉有效日期:
s = pd.to_datetime(s, dayfirst=True, errors="coerce")
# errors="coerce" to transform invalid strings
到目前为止产生:
0 NaT
1 2020-01-23
2 NaT
3 2020-05-01
4 NaT
Name: Col1, dtype: datetime64[ns]
然后使用
pandas.Series.ffill
与
limit==1
获取有效日期和
右下一行 :
df["Col1"] = s.ffill(limit=1)
df = df.dropna(subset=["Col1"])
print(df)
所以我们有想要的行和他们的下一行:
Col0 Col1 Col2 Col3 Col4 Col5
1 1 2020-01-23 Joe G USA NaN G5 paper
2 2 2020-01-23 get_me NaN NaN NaN
3 3 2020-05-01 Frank F CAN NaN F4 Paper
4 4 2020-05-01 get_me_2 NaN NaN NaN
最后,使用
pandas.DataFrame.groupby
迭代和解开
Col2
只要:
dfs = []
for k,d in df.groupby("Col1"):
dfs.append(d.assign(tmp=["Col2", "Col6"]).pivot("Col1", "tmp", "Col2").merge(d))
new_df = pd.concat(dfs).sort_index(1).reset_index(drop=True)
print(new_df)
最终输出:
Col1 Col2 Col3 Col4 Col5 Col6
0 2020-01-23 Joe G USA NaN G5 paper get_me
1 2020-05-01 Frank F CAN NaN F4 Paper get_me_2
groupby
背后的逻辑部分:
groupby
:为每个日期透视数据框的子集d.assign(...)
: 保持原来的 colname Col2
并根据需要命名新列,Col6
pivot
: 解开 Col2
.与 assign
和 pivot
,子集看起来像: tmp Col2 Col6
Col1
2020-05-01 Frank F get_me_2
关于pandas - 如何使用正则表达式在 Pandas 数据框中选择一行和包含特定子字符串的行后面的固定行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65029838/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!