【发布时间】:2021-11-29 21:46:51
【问题描述】:
给定一个数据框,我想检查 DS1.ColA 或 DS1.ColB 是否包含“类型 1”,如果是,我想将相应的 DS1.Val 插入到列值中。 DS2 也是如此,检查 DS2.ColA 或 DS2.ColB 是否包含“Type 1”,如果是,我想将相应的 DS2.Val 插入到列 Value 中。
df = pd.DataFrame(
{
'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06'],
'DS1.ColA': ["Type 1","Undef",np.nan,"Undef",
"Type 1", ""],
'DS1.ColB': ["N","Type 1","","",
"Y", np.nan],
'DS1.Val': [85,87,18,94,
81, 54],
'DS2.ColA': ["Type 1","Undef","Type 1","Undef",
"Type 1", ""],
'DS2.ColB': ["N","Type 2","","",
"Y", "Type 1"],
'DS2.Val': [45,98,1,45,66,36]
}
)
var_check = "Type 1"
ds1_col_check = ["DS1.ColA","DS1.ColB","DS1.Val"]
ds2_col_check = ["DS2.ColA","DS2.ColB","DS2.Val"]
ds1_col_check 和 ds2_col_check 的最后一个元素始终是要放置在新列中的元素(列表中可能有更多列要检查)。最终结果 df 应该如下所示。我如何在 python 中实现这一点?
【问题讨论】:
-
最后一列值在所需输出中表示什么?
-
它来自 DS1.Val 或 DS2.Val,如果 DS1 列具有所需的字符串,则从 DS1.Val 获得值,否则,如果 DS2 列具有所需的字符串,则从 DS2.Val 获得值跨度>
-
在所需的输出中,为什么 AB04 有一行,因为没有列 DS1.ColA、DS1.ColB、DS2.ColA、DS2.ColB 有“type1”?
-
在某些情况下,DS1 和 DS2 的任何列中都没有出现“类型 1”,因此它的值是 nan
标签: python pandas dataframe numpy data-manipulation