Разделить столбец данных по содержимому

Как я могу разделить этот столбец данных на «A», «B» ...? Первый столбец в качестве индекса должен быть сохранен.

df = pd.DataFrame(data)
df = df[['seconds', 'marker', 'data1', 'data2', 'data3']]

seconds,marker,data1,data2,data3
00001,A,3,3,0,42,0
00002,B,3,3,0,34556,0
00003,C,3,3,0,42,0
00004,A,3,3,0,1833,0
00004,B,3,3,0,6569,0
00005,C,3,3,0,2454,0
00006,C,3,3,0,3256,0
00007,C,3,3,0,5423,0
00008,A,3,3,0,569,0

Привет, не могли бы вы предоставить ожидаемый результат?

edd313 23.03.2022 01:17
0
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто получить уникальные значения в столбце letter (так я его назвал). А затем отфильтруйте DataFrame, содержащий все значения, используя эти уникальные значения.

Здесь я храню только что созданные кадры данных в словаре, но вы также можете сохранить их в списке или где-то еще. Я использовал предоставленный вами ввод, но дал первым двум столбцам имена index и letter, поскольку они были безымянными в вашем .csv.

import pandas as pd

df = pd.DataFrame({
    'index': {0: 1, 1: 2, 2: 3, 3: 4, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8},
    'letter': {0: 'A', 1: 'B', 2: 'C', 3: 'A', 4: 'B', 5: 'C', 6: 'C', 7: 'C', 8: 'A'},
    'seconds': {0: 3, 1: 3, 2: 3, 3: 3, 4: 3, 5: 3, 6: 3, 7: 3, 8: 3},
    'marker': {0: 3, 1: 3, 2: 3, 3: 3, 4: 3, 5: 3, 6: 3, 7: 3, 8: 3},
    'data1': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0},
    'data2': {0: 42, 1: 34556, 2: 42, 3: 1833, 4: 6569, 5: 2454, 6: 3256, 7: 5423, 8: 569},
    'data3': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0}
})

# get unique values
unique_values = df["letter"].unique()
# filter "big" dataframe using one of the unique value at a time
split_dfs = {value: df[df["letter"] == value] for value in unique_values}

print(split_dfs["A"])
print(split_dfs["B"])
print(split_dfs["C"])

Ожидаемый результат:

   index letter  seconds  marker  data1  data2  data3
0      1      A        3       3      0     42      0
3      4      A        3       3      0   1833      0
8      8      A        3       3      0    569      0
   index letter  seconds  marker  data1  data2  data3
1      2      B        3       3      0  34556      0
4      4      B        3       3      0   6569      0
   index letter  seconds  marker  data1  data2  data3
2      3      C        3       3      0     42      0
5      5      C        3       3      0   2454      0
6      6      C        3       3      0   3256      0
7      7      C        3       3      0   5423      0

Как видите, индекс сохранился.

Другие вопросы по теме