【问题标题】:how to pass pandas series element to another dataframe如何将熊猫系列元素传递给另一个数据框
【发布时间】:2019-05-30 10:55:54
【问题描述】:

我想检查是否发生了错误。 我有这两个数据框,来自 excel 文件:

Log_frame是日志文件的数据框,报告数据记录和错误:

               Time       Voltage[V]  Freq[Hz] Speed    Motor_Stt: ErrNo
           0  10:00          220         50     30           1      0
           1  10:10          220         50     30           1      0
           2  10:20          220         50      0           2      3601
           3  10:30          220         47      0           1      1500
           4  10:40          250         50      0           1      7707
           5  10:50          220         50      0           2      3601
           6  11:00          220         50      0           2      3601
           7  11:10          220         47      0           1      1500
           8  11:20          220         50     30           1      0
           9  11:30          220         50     30           1      0

dev_frame是错误描述的dataframe:

    Fehler-Nr.         Descr                Cause

0   1500          Chk_Voltage      Voltage out of range
1   7707           Chk_Freq.       Freq. out of range
2   3601         Chk_Motor_Stt          Motor_defec
3   7704          switch_trip           chk_over_curr

从 Log_frame 我可以检查一天中是否发生了哪些错误以及发生了多少错误:

Err_log = Log_frame['ErrNo']
p = Err_log[Err_log != 0].drop_duplicates('first').reset_index(drop=True)

这个结果是熊猫系列:

<class 'pandas.core.series.Series'>
0    3601
1    1500
2    7707

我可以通过这个“通过”第一个错误(或第二个和所有其他错误):

Dev_Err = Dev_frame['Fehler-Nr.']
n = Dev_Err[Dev_Err == p.iloc[0]] #or 1, 2 and so on

我想知道如何通过 p.iloc[i] 循环。 我应该使用 for 循环还是可以通过任何 pandas 函数来完成

编辑:例如如果我将 1 放入 p.iloc[] 我可以得到:

0   1500

如果 2:

1   7707

【问题讨论】:

  • Dev_frame 没有Fehler-Nr. 栏目,可以添加到问题中吗?
  • 是的,请添加“Fehler-Nr.”有问题,我想您想将 Dev_Err df 子集化为 p,请多解释一下问题。
  • 作为其他突出显示的添加“Fehler-Nr”作为列。您可以使用 pandas 的“合并”功能来获得所需的结果。
  • 已编辑。我尝试了一个循环循环,增加 iloc[i] 但它似乎不起作用

标签: python-3.x pandas series


【解决方案1】:

无需创建循环来检查每个值,您可以使用isin 的方法pandas.DataFrame 具有如下:

n = dev_frame[dev_frame['Fehler-Nr.'].isin(p)]['Fehler-Nr.']

即将返回:

0    1500
1    7707
2    3601
Name: Fehler-Nr., dtype: int64

参考:pandas.DataFrame.isin

【讨论】:

    【解决方案2】:

    如果您使用 pandas 并使用 for 循环,那您就错了。使用 pandas 向量化操作。这些是使用(简单的例子)完成的

    df.apply(some function, axis)
    

    我不是 100% 相信我理解您想要实现的目标,但我相信您只想合并/加入给定错误的错误数量。如果是这样,pandas.join() 和 pandas.merge() 将提供帮助。检查文档。

    【讨论】:

    • 感谢您的解释。我会避免使用 Pandas 循环
    猜你喜欢
    • 2021-07-14
    • 2015-01-13
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2017-11-11
    • 1970-01-01
    • 2019-04-23
    相关资源
    最近更新 更多