我有两个数据框,第一个有我的主要数据。我正在从第一个数据帧中取出一列,并用字符串拆分制作另一个数据帧。
_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
答案 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元素。
notna将None
和np.Nan
值均视为NA值。