Я рассматриваю Pandas Dataframe. Я хотел бы найти эффективный способ создания второго кадра данных каждый раз, когда имя столбца содержит число 4, и поэтому элементы столбца являются массивами.
import pandas as pd
data = {"A4aa":[[1, 2,3,4]], "B":[12,],"B4bb":[[5, 6,7,8]]}
data1 = {"A0aa":[1],"A1aa":[2],"A2aa":[3],"A3aa":[4], "B":[12,],"B0bb":[5],"B1bb":[6],"B2bb":[7],"B3bb":[8]}
df = pd.DataFrame(data)
df1 = pd.DataFrame(data1)
A4aa B B4bb
0 [1, 2, 3, 4] 12 [5, 6, 7, 8]
data1 = {"A0":[1],"A1":[2],"A2":[3],"A3":[4], "B":[12,],"B0":[5],"B1":[6],"B2":[7],"B3":[8]}
df1 = pd.DataFrame(data1)
A0aa A1aa A2aa A3aa B B0bb B1bb B2bb B3bb
0 1 2 3 4 12 5 6 7 8
def f(df):
def g(c):
pre, *suf = c.split('4')
if suf:
return pd.DataFrame(df[c].tolist()).add_prefix(pre).add_suffix(''.join(suf))
else:
return df[c]
return pd.concat(map(g, df), axis=1)
f(df)
A0aa A1aa A2aa A3aa B B0bb B1bb B2bb B3bb
0 1 2 3 4 12 5 6 7 8
@StefanoBarone попробуй
Большое спасибо, немного более элегантное, но более или менее такое же решение, которое я смог получить из вашего первого ответа.
Извините, я слишком упростил проблему, и решения не пересекаются, я пытаюсь ее адаптировать. Если бы я случайно мог опубликовать эффективное решение с этим новым усложнением, это было бы идеально.