【问题标题】:Pandas iterating over two dataframesPandas 遍历两个数据帧
【发布时间】:2019-08-27 12:04:10
【问题描述】:

我有两个数据框,第一个有我的主要数据。我正在从第一个数据帧中取出一列,并使用字符串拆分制作另一个数据帧。

_t1 = df1["TABLE_NAME"].str.split("_",expand = True)
_t1.head()

df1 的第一个值为T_STG_PRG_POS_NORM_FAREAST,第二个值为T_STG_PRG_POS_NORM_EXEC_DBIT

_t1 looks like:

+---+-----+-----+-----+------+---------+------+------+
| 0 |  1  |  2  |  3  |  4   |    5    |  6   |  7   |
+---+-----+-----+-----+------+---------+------+------+
| T | STG | PRG | POS | NORM | FAREAST | None |      |
| T | STG | PRG | POS | NORM | EXCEC   | DBIT | None |
+---+-----+-----+-----+------+---------+------+------+

现在我想创建一个列 df1["SYSTEM NAME"],它的第 0 行和 DBIT 的值应该是 FAREAST

我正在尝试这个循环:

for index,row in df1.iterrows():
    for column in _t1:
        if (pd.isna(_t1[column][row])== True):
            df1["SYSTEM NAME"]= _t1[column-1][row]

但我收到错误消息:ValueError: cannot index with vector containing NA / NaN values

【问题讨论】:

  • 你可以试试df1["SYSTEM NAME"]=df1["TABLE_NAME"].str.split("_").str[5] 吗?
  • @anky_91 适用于第 0 行,但不适用于其他行。 _t1 共有 7 列,5-7 中的任何一个都可以是最终值。
  • 所以你想要每个_t1 行的最终有效值?
  • @Valentino df1["SYSTEM NAME"] 中的值应该是_t1 每一行的最后一个非None 值
  • 您的示例中没有第 7 列。

标签: python pandas dataframe iterator


【解决方案1】:

我不明白您为什么需要t1,因为您正在寻找拆分的最后一个元素。以下应该可以工作并且它是矢量的。

import pandas as pd

df = pd.DataFrame({"TABLE_NAME":["T_STG_PRG_POS_NORM_FAREAST",
                                 "T_STG_PRG_POS_NORM_EXEC_DBIT"]})

df["SYSTEM_NAME"] = df["TABLE_NAME"].str.split("_").str[-1]

【讨论】:

    【解决方案2】:

    至于@rpanai's answer,则不需要_t1

    但是如果你出于某种原因想要使用_t1,这里是如何做的:

    df1['SYSTEM_NAME'] = _t1.apply(lambda x : x[x.notna()].iloc[-1], axis=1)
    

    apply 方法中的lambda 函数从每一行获取最后一个非NA 元素。
    notnaNonenp.Nan 值都视为NA 值。

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 1970-01-01
      • 2019-02-26
      • 2021-05-16
      • 1970-01-01
      • 2021-11-18
      • 2020-11-21
      • 1970-01-01
      • 2021-06-02
      相关资源
      最近更新 更多