如何在Python中迭代列表并从其他列表中添加值?
我有一份清单:如何在Python中迭代列表并从其他列表中添加值?,python,pandas,list,loops,dataframe,Python,Pandas,List,Loops,Dataframe,我有一份清单: my_list=['ga:date'],['ga:country','ga:date'],['ga:country','ga:date'] 并尝试遍历它以获得值及其位置,如下所示: date 1 country 1 date 2 country 1 date 2 并将其全部储存在一个容器中 正如有人建议的那样,我可以这样做,而且效果非常好: 将列表理解与元组列表的枚举和展平一起使用: my_list = [['ga:date'], ['ga:country'
my_list=['ga:date'],['ga:country','ga:date'],['ga:country','ga:date']
并尝试遍历它以获得值及其位置,如下所示:
date 1
country 1
date 2
country 1
date 2
并将其全部储存在一个容器中
正如有人建议的那样,我可以这样做,而且效果非常好:
将列表理解与元组列表的枚举和展平一起使用:
my_list = [['ga:date'], ['ga:country', 'ga:date'], ['ga:country', 'ga:date']]
x = [(b, a) for i in my_list for (a, b) in enumerate(i, 1)]
print (x)
[('ga:date', 1), ('ga:country', 1), ('ga:date', 2), ('ga:country', 1), ('ga:date', 2)]
df = pd.DataFrame(x, columns = ['field','listIndex'])
print (df)
field listIndex
0 ga:date 1
1 ga:country 1
2 ga:date 2
3 ga:country 1
4 ga:date 2
或者,如果可能,更改柱的位置:
x1 = [z for i in my_list for z in enumerate(i, 1)]
print (x1)
[(1, 'ga:date'), (1, 'ga:country'), (2, 'ga:date'), (1, 'ga:country'), (2, 'ga:date')]
df = pd.DataFrame(x1, columns = ['listIndex','field'])
print (df)
listIndex field
0 1 ga:date
1 1 ga:country
2 2 ga:date
3 1 ga:country
4 2 ga:date
但是还有另外3个列表,我必须添加到结果df中
my_id_list = ['01', '02', '03']
start_dates = ['2019-01-01', '2019-01-03', '2019-01-10']
end_dates = ['2019-01-02', '2019-01-05', '2019-01-11']
所以它需要看起来像这样:
field listIndex id start_date end_date
0 ga:date 1 01 2019-01-01 2019-01-02
1 ga:country 1 02 2019-01-03 2019-01-03
2 ga:date 2 02 2019-01-03 2019-01-03
3 ga:country 1 03 2019-01-10 2019-01-11
4 ga:date 2 03 2019-01-10 2019-01-11
field listIndex id start_ date end_date
0 ga:date 1 115126931 2019-01-01 2019-01-02
1 ga:country 1 199714437 2019-01-03 2019-01-03
2 ga:date 2 199714437 2019-01-03 2019-01-03
3 ga:country 1 197531387 2019-01-10 2019-01-11
4 ga:date 2 197531387 2019-01-10 2019-01-11
值可以不同,没有固定值
如果能得到任何帮助,我将不胜感激,我只想在工作中结束一个项目,忘掉它
更新
我的id列表包含不同的整数。它们可以不同,我的意思是,下面这三个不是唯一的
my_id_list = ['115126931', '199714437', '197531387']
所以它需要看起来像这样:
field listIndex id start_date end_date
0 ga:date 1 01 2019-01-01 2019-01-02
1 ga:country 1 02 2019-01-03 2019-01-03
2 ga:date 2 02 2019-01-03 2019-01-03
3 ga:country 1 03 2019-01-10 2019-01-11
4 ga:date 2 03 2019-01-10 2019-01-11
field listIndex id start_ date end_date
0 ga:date 1 115126931 2019-01-01 2019-01-02
1 ga:country 1 199714437 2019-01-03 2019-01-03
2 ga:date 2 199714437 2019-01-03 2019-01-03
3 ga:country 1 197531387 2019-01-10 2019-01-11
4 ga:date 2 197531387 2019-01-10 2019-01-11
您可以尝试:
df=pd.DataFrame([(a,b,e) for e,i in enumerate(my_list) for (a, b) in enumerate(i, 1)],
columns=['list_index','feild','index_list_of_list'])
df1=pd.DataFrame(zip(map(int,my_id_list),start_dates,end_dates)
,columns=['id','startdate','enddate'])
注意事项:也可以考虑通过“代码> Pd、tox DATITEME())/<代码> < /P>将日期更改为DATE时间,到目前为止您尝试了什么?考虑存储每个列表的索引,同时列举为名为“代码> ID ”的列。使用您拥有的3个列表创建另一个df,并在
id
上合并,这是id\u列表
很酷,谢谢,不过还有一段时间。ID不仅仅是数字,它们已经预先定义好了。我不能把任何号码作为身份证。@AnnaDmitrieva所以我的身份证列表
你的身份证对吗?看起来你正在寻找列表列表下的列表索引进行映射,你能用更多关于如何加入的细节更新你的问题吗?是的,没问题,我会更新它。我的id列表是id,但它们看起来像“115126931”。@AnnaDmitrieva我已经更新了我的答案,想法是一样的,只有合并方法changes@AnnaDmitrieva没问题,而且mylist的枚举数也会更改,它应该从0开始,因为分配给数据帧的默认索引是0,所以在right\u index
上进行合并是可行的:)