我们可以传递一列而不是变量来访问列表的第 n 项吗?
Posted
技术标签:
【中文标题】我们可以传递一列而不是变量来访问列表的第 n 项吗?【英文标题】:Can we pass a column instead of a variable to access nth item of a list? 【发布时间】:2021-07-21 19:01:16 【问题描述】:我的数据包含多列,我在这些列上进行了分组,并根据分组给出了行号。我在这里使用 python “文本”列是字符串列表。整个“文本”最初是 1 个字符串,用 ; 拆分成一个列表。作为分隔符。行号是整数。 我在这里要做的是,将 Rownum 视为指向输出列的指针。 如果 Rownum=0,那么我的输出应该是 Text[0],即 a.
如果 Rownum = 2,输出应该是列表 Text 的第 2 项,Text1,即 b
为此,我尝试了:
df['Outpu'] = df.apply(lambda x:x['Text'].split(';'),axis = 1)[df['Row_num']]
但我收到错误“无法从重复轴重新索引”。 不完全确定这意味着什么。 我附上了我的数据和输出的图像,但也写下了格式以防图像不可用。希望我解释的情况足够清楚。 原文不是 a,b,c:放在那里便于理解。这是正文:
Text: [TAF KPHX 010246Z 0103/0206 VRB04KT P6SM FEW070 BKN160 ;FM010700 10005KT P6SM SCT060 BKN150 ;FM012100 21006KT P6SM SCT070 SCT140 ;FM020000 26005KT P6SM FEW070 SCT140]
Row num Text Output
0 [a,b,c,d] a
1 [a,b,c,d] b
2 [a,b,c,d] c
3 [a,b,c,d] d
0 [d,e,f] d
1 [d,e,f] e
2 [d,e,f] f
【问题讨论】:
请不要链接到图片,编辑问题并将数据添加为文本。 【参考方案1】:如我所见,分隔符应该是“,”而不是“;”。由于“Text”是单个字符串,因此首先删除方括号uisng replace()
,然后将其拆分为“,”,然后使用“Row_num”中的索引提取元素
df =pd.DataFrame("Row_num": [0,1,2,3,0,1,2],"Text":['[a,b,c,d]', '[a,b,c,d]', '[a,b,c,d]', '[a,b,c,d]', '[d,e,f]', '[d,e,f]', '[d,e,f]'])
df["Output"] = df.apply(lambda x: x.Text.replace("[","").replace("]","").split(",")[x.Row_num], axis=1)
print(df)
Row_num Text Output
0 0 [a,b,c,d] a
1 1 [a,b,c,d] b
2 2 [a,b,c,d] c
3 3 [a,b,c,d] d
4 0 [d,e,f] d
5 1 [d,e,f] e
6 2 [d,e,f] f
假设您在文本列中有“,”作为分隔符,然后尝试:
df =pd.DataFrame("Row_num": [0,1,2,3,4],"Text":["a;b;c;d;e"]*5)
df["Output"] = df.apply(lambda x: x.Text.split(";")[x.Row_num], axis=1)
print(df)
Row_num Text Output
0 0 a;b;c;d;e a
1 1 a;b;c;d;e b
2 2 a;b;c;d;e c
3 3 a;b;c;d;e d
4 4 a;b;c;d;e e
确保数据在提到的 Row_num 处的 Text 中可用
【讨论】:
这是文本的原始格式。我使用字母只是为了更容易理解。 TAF KPHX 010246Z 0103/0206 VRB04KT P6SM FEW070 BKN160 ;FM010700 10005KT P6SM SCT060 BKN150 ;FM012100 21006KT P6SM SCT070 SCT140 ;FM020000 26005KT40CTpans> 您提供的示例文本中有“,” 我明白,这是我的错误。应该使用 ;作为分隔符。你能帮我解决实际的文本部分吗?我通过稍微调整它尝试了您的数据解决方案,但收到错误“列表索引超出范围” 它应该给出错误,因为分隔符是“,”所以每次拆分只返回一个值。好吧,为您编辑了答案。请检查一下。以上是关于我们可以传递一列而不是变量来访问列表的第 n 项吗?的主要内容,如果未能解决你的问题,请参考以下文章