Предположим, у меня есть df
, как это:
stringOfInterest trend
0 C up
1 D down
2 E down
3 C,O up
4 C,P up
Я хочу построить это df
как гистограмму, используя pandas
. Чтобы получить правильные сгруппированные гистограммы, я хотел бы сгруппировать данные по столбцу df["trend"]
, а затем посчитать вхождение df["stringOfInterest"]
для каждой буквы .
Как видно, некоторые из этих строк содержат несколько букв, разделенных ",".
Использование
df.groupby("trend").stringOfInterest.value_counts().unstack(0)
дает ожидаемый результат:
trend down up
stringOfInterest
- 7.0 8.0
C 3.0 11.0
C,O NaN 2.0
C,P 1.0 1.0
D 1.0 2.0
E 15.0 14.0
E,T 1.0 NaN
Однако я хотел бы посчитать вхождение отдельных символов (C, E, D, ...).
На оригинальном df
это может быть достигнуто следующим образом:
s = df.stringOfInterest.str.split(",", expand = True).stack()
s.value_counts()
Обычно это генерирует что-то вроде этого:
C 3
E 2
D 1
O 1
P 1
T 1
К сожалению, здесь нельзя использовать после groupby()
в сочетании с unstack()
.
Может быть, я не на том пути, и предпочтительнее будет какой-нибудь более элегантный способ.
Для пояснения графика: Для каждой буквы (stringOfInterest) должно быть два бара, указывающих количество тренда «вверх» и «вниз».