检查 Pandas DataFrame 列中的序列
Check for sequence in column of Pandas DataFrame
我的 DataFrame 如下所示:
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Monate 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
.. ... ...
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Tage 2020-05-27
148 Tage 2020-05-28
按Date
排序。我需要 运行 检查每一行是否 Monate 跟随 Monate,Wochen 跟随 Wochen 等等。允许沃臣跟着莫纳特,塔哥跟着沃臣。我希望我的意思很清楚。看起来这应该会导致错误,因为序列无效。
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Tage 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
.. ... ...
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Wochen 2020-05-27
148 Tage 2020-05-28
我可以尝试在每一行上编写一个非常复杂且可能很慢的迭代。
for row in result_df.iterrows():
do xyz
是否有更好更快的方法来检查系列中的正在进行的序列或列表、字典等中的可能序列?
我相信你可以创建一个数字字典来说明顺序并替换类别列的值并检查 series.diff
是否永远不会为负 series.all
:
def check(dataframe):
d = {'Monate':1,'Wochen':2,'Tage':3}
return dataframe['Category'].replace(d).diff().fillna(0).ge(0).all()
测试运行:
print(df,'\n\n',f"Valid? : {check(df)}",'\n\n',df1,'\n\n',f"Valid? : {check(df1)}")
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Monate 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Tage 2020-05-27
148 Tage 2020-05-28
Valid? : True
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Tage 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Wochen 2020-05-27
148 Tage 2020-05-28
Valid? : False
我的 DataFrame 如下所示:
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Monate 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
.. ... ...
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Tage 2020-05-27
148 Tage 2020-05-28
按Date
排序。我需要 运行 检查每一行是否 Monate 跟随 Monate,Wochen 跟随 Wochen 等等。允许沃臣跟着莫纳特,塔哥跟着沃臣。我希望我的意思很清楚。看起来这应该会导致错误,因为序列无效。
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Tage 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
.. ... ...
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Wochen 2020-05-27
148 Tage 2020-05-28
我可以尝试在每一行上编写一个非常复杂且可能很慢的迭代。
for row in result_df.iterrows():
do xyz
是否有更好更快的方法来检查系列中的正在进行的序列或列表、字典等中的可能序列?
我相信你可以创建一个数字字典来说明顺序并替换类别列的值并检查 series.diff
是否永远不会为负 series.all
:
def check(dataframe):
d = {'Monate':1,'Wochen':2,'Tage':3}
return dataframe['Category'].replace(d).diff().fillna(0).ge(0).all()
测试运行:
print(df,'\n\n',f"Valid? : {check(df)}",'\n\n',df1,'\n\n',f"Valid? : {check(df1)}")
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Monate 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Tage 2020-05-27
148 Tage 2020-05-28
Valid? : True
Category Date
81 Monate 2020-01-01
88 Monate 2020-01-02
58 Tage 2020-01-03
3 Monate 2020-01-04
23 Monate 2020-01-05
134 Wochen 2020-05-24
145 Tage 2020-05-25
147 Tage 2020-05-26
146 Wochen 2020-05-27
148 Tage 2020-05-28
Valid? : False