from collections import Counter
def list_flattener(list_of_lists):
return [item for row in list_of_lists for item in row]
def my_dataframe_filler(df1, df2):
list_2_fill = []
repeats = dict(Counter(df2["ID"]))
for k in repeats.keys():
available_labels_list = df1[df1["ID"]==k]["Labels"].tolist()
available_labels_list+=[[np.nan]*10]
available_labels_list = list_flattener(available_labels_list)
list_2_fill+=available_labels_list[:repeats[k]]
return list_2_fill
У меня есть два кадра данных, например df1 и df2 [code]import pandas as pd col_1= ["A", ["B","C"], ["A","C","D"], "D"] col_id = [1,2,3,4] col_2 = [1,2,2,3,3,4,4] d1 = {'ID': [1,2,3,4], 'Labels': col_1} d2 = {'ID': col_2, } d_2_get = {'ID': col_2, "Labels": ["A", "B", "C", "A", "C", "D", np.nan] } df1 = pd.DataFrame(data=d1) df2 = pd.DataFrame(data=d2) df_2_get = pd.DataFrame(data=d_2_get) [/code] [code]df1[/code] выглядит [code] ID col2 0 1 A 1 2 [B, C] 2 3 [A, C, D] 3 4 D [/code] and df2 выглядит [code] ID 0 1 1 2 2 2 3 3 4 3 5 4 6 4 [/code] Я хочу добавить столбец «Метки» в df2, взятый из df1, таким образом, чтобы: [list] [*]для индекса i начните с первого значения в df1 [*]если новая строка в df2["ID "] имеет повторяющуюся запись, получите следующее значение в df1, если оно существует. Если нет, установите NaN. [/list] При наличии df1 и df2 вывод должен выглядеть как df_2_get ниже [code] ID Labels 0 1 A 1 2 B 2 2 C 3 3 A 4 3 C 5 4 D 6 4 NaN [/code] Моя текущая неуклюжая попытка ниже, [code]from collections import Counter def list_flattener(list_of_lists): return [item for row in list_of_lists for item in row]
def my_dataframe_filler(df1, df2): list_2_fill = [] repeats = dict(Counter(df2["ID"])) for k in repeats.keys(): available_labels_list = df1[df1["ID"]==k]["Labels"].tolist() available_labels_list+=[[np.nan]*10] available_labels_list = list_flattener(available_labels_list) list_2_fill+=available_labels_list[:repeats[k]] return list_2_fill [/code] а затем использовать как [code]df2["Labels"] = my_dataframe_filler(df1, df2) [/code] но я хотел бы узнать, как черный пояс панды справится с этой проблемой, спасибо
У меня есть два кадра данных, например df1 и df2
import pandas as pd
col_1= [ A , , , D ]
col_id =
col_2 =
d1 = {'ID': , 'Labels': col_1}
d2 = {'ID': col_2, }
d_2_get = {'ID': col_2, Labels : }
df1 = pd.DataFrame(data=d1)
df2 =...
x — это фрейм данных:
x
year mar 31, 2024 mar 31, 2023
0 net income 306.000 524.0000
1 net income growth -0.416 -0.0455
2 retained rate NaN NaN
3 pe 419.930 0.0000
Это индекс строки и имя столбца:
x.index
RangeIndex(start=0, stop=4, step=1)...