熊猫在两个数据框上进行迭代

时间:2019-08-27 12:04:10

标签: python pandas dataframe iterator

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

_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行和FAREAST的值应为DBIT

我正在尝试以下循环:

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

2 个答案:

答案 0 :(得分:2)

我不明白为什么您需要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]

答案 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值。