Как сделать каждую ячейку данных в виде столбца данных - PullRequest
2 голосов
/ 27 июня 2019

У меня есть фрейм данных со столбцом A, я хочу разделить столбец на бины и подсчитать каждый бин как столбец фрейма данных, например, от 0 до количества точек и добавить это в фрейм данных.

я использовал этот код для биннинга, но я не уверен, как вставить столбец count в df.

df=pd.DataFrame({'max':[0.2,0.3,1,1.5,2.5,0.2]})
print(df)
   max
0  0.2
1  0.3
2  1.0
3  1.5
4  2.5
5  0.2

    bins = [0, 0.5, 1, 1.5, 2, 2.5]

    x=pd.cut(df['max'], bins)

желаемый вывод

print(df)
   0_0.5_count  0.5_1_count
0            3            1

1 Ответ

1 голос
/ 27 июня 2019

Сначала добавьте параметр label к cut, затем подсчитайте до Series.value_counts и для DataFrame используйте Series.to_frame с транспонированием по DataFrame.T:

bins = [0, 0.5, 1, 1.5, 2, 2.5]

labels = ['{}_{}_count'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
x=pd.cut(df['max'], bins, labels=labels).value_counts().sort_index().to_frame(0).T
print (x)

   0_0.5_count  0.5_1_count  1_1.5_count  1.5_2_count  2_2.5_count
0            3            1            1            0            1

Подробности :

print (pd.cut(df['max'], bins, labels=labels))
0    0_0.5_count
1    0_0.5_count
2    0.5_1_count
3    1_1.5_count
4    2_2.5_count
5    0_0.5_count
Name: max, dtype: category
Categories (5, object): [0_0.5_count < 0.5_1_count < 1_1.5_count < 1.5_2_count < 2_2.5_count]

print (pd.cut(df['max'], bins, labels=labels).value_counts())
0_0.5_count    3
2_2.5_count    1
1_1.5_count    1
0.5_1_count    1
1.5_2_count    0
Name: max, dtype: int64  

Альтернативное решение с GroupBy.size:

bins = [0, 0.5, 1, 1.5, 2, 2.5]

labels = ['{}_{}_count'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
x= df.groupby(pd.cut(df['max'], bins, labels=labels)).size().rename_axis(None).to_frame().T
print (x)
   0_0.5_count  0.5_1_count  1_1.5_count  1.5_2_count  2_2.5_count
0            3            1            1            0            1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...