【发布时间】:2019-12-29 21:37:13
【问题描述】:
我有一个清单:
my_list = [['ga:date'], ['ga:country', 'ga:date'], ['ga:country', 'ga:date']]
并尝试遍历它以获取值及其位置,如下所示:
date 1
country 1
date 2
country 1
date 2
并将其全部存储在 pandas DF 中。
正如建议的那样,我可以这样做,而且效果很好:
对元组列表使用列表推导式枚举和展平:
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
值可以不同,没有解决办法。
感谢任何帮助,我只想结束工作中的一个项目并忘记它。
更新
我的 id 列表包含不同的 int 数字。它们可以不同,我的意思是,下面这 3 个并不是唯一的。
my_id_list = ['115126931', '199714437', '197531387']
所以它需要看起来像这样:
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的列。使用您拥有的 3 个列表创建另一个 df 并在id上合并,即id_list
标签: python pandas list loops dataframe