我如何在数据框架中迭代特定行?



我想根据Content_ID_group列中列表因子的数量迭代特定的行。

例如,由于下表的第一行在Content_ID_group列的列表中有六个因子,我想让其他列(Event Name,Media)迭代六次。

作为原始数据帧,我有:

>>> import pandas as pd
>>> graph = pd.DataFrame({"Event Name": ["ord", "inflow"], "Media":["google", "appier"], "Content Id_group":[[1,2,3,4,5,6], 0]})
>>> print(graph)
Event Name   Media    Content Id_group
0        ord  google  [1, 2, 3, 4, 5, 6]
1     inflow  appier                   0

,这是我想要的输出:

Event Name   Media Content Id_group
0        ord  google                1
0        ord  google                2
0        ord  google                3
0        ord  google                4
0        ord  google                5
0        ord  google                6
1     inflow  appier                0

这是我的代码。它只是继续运行,不给出结果。所以我猜这是一个无限循环。

有人能帮忙吗?

  • graph是我定义的图形。
  • g_whole是必须包含我定义的所有迭代结果的数据帧。
g_whole=pd.DataFrame()
for g in range(len(graph)):
if type(graph['Content ID_group'][0]) == list:
loop=len(graph['Content ID_group'][0])
for l in range(loop):
itt=graph.loc[g]
g_whole.append(itt)

elif type(graph['Content ID_group'][0]) == int:
g_whole.append(graph['Content ID_group'][0])
print(g_whole)

假设Content ID_group包含一个真正的列表,您可以使用explode:

>>> type(graph.at[0, 'Content ID_group'])
list
>>> graph.explode('Content ID_group')
Event Name   Media Content ID_group
0        ord  google                1
0        ord  google                2
0        ord  google                3
0        ord  google                4
0        ord  google                5
0        ord  google                6
1     inflow  appier                0

如果Contains ID_group包含字符串,则必须先输入eval:

>>> type(graph.at[0, 'Content ID_group'])
str
>>> graph['Content ID_group'] = graph['Content ID_group'].apply(pd.eval)
>>> graph.explode('Content ID_group')
Event Name   Media Content ID_group
0        ord  google                1
0        ord  google                2
0        ord  google                3
0        ord  google                4
0        ord  google                5
0        ord  google                6
1     inflow  appier                0

使用pd.DataFrame.explode():

In [1]: df = pd.DataFrame({'Event Name': ['ord', 'inflow'], 'Media': ['google', 'appier'], 'Content ID_group': [[1,2,3,4,5,6], 0]})
In [2]: df.explode('Content ID_group')
Out[2]:
Event Name   Media Content ID_group
0        ord  google                1
0        ord  google                2
0        ord  google                3
0        ord  google                4
0        ord  google                5
0        ord  google                6
1     inflow  appier                0
import pandas as pd
graph = pd.DataFrame({"Event Name": ["ord", "inflow"], "Media":["google", "appier"], "Content Id_group":[[1,2,3,4,5,6], 0]})
print(graph)
Event Name   Media    Content Id_group
0        ord  google  [1, 2, 3, 4, 5, 6]
1     inflow  appier                   0
g_whole = graph.explode("Content Id_group")
print(g_whole)
Event Name   Media Content Id_group
0        ord  google                1
0        ord  google                2
0        ord  google                3
0        ord  google                4
0        ord  google                5
0        ord  google                6
1     inflow  appier                0

最新更新