2013-11-08 2 views
1

df = DataFrame (randn (10,5)) создает блок данных, состоящий из 5 столбцов с 10 образцами в каждом столбце. Что бы я сделал, если бы вместо этого я хотел получить фреймворк с пятью столбцами, но где первый столбец содержал 10 выборок, второй 20 образцов, третий 30 и т. Д.?Pandas: создать фрейм данных с k столбцами n1, n2, n3 и т. Д. Случайные выборки

Спасибо

+0

можно записать пример того, что вы имеете в виду? похоже, что ваша таблица не будет * симметричной * .. – Acorbe

+0

Да, точно, она не была бы симметричной. Поэтому, если последний столбец имеет 50 значений, тогда первый столбец будет содержать 40 NaN, второй 30 NaN и т. Д. Хорошо? – luffe

+0

Не можете ли вы создать 30 случайных чисел для всех столбцов, а затем вернуть к NaN те, которые вы хотите пустым? – RobinL

ответ

2

Не overthink это один: просто сделать случайный ряд длины вы хотите, и объединить их вместе. Затем переставьте результаты.

>>> counts = range(1, 6, 1) 
>>> df = pd.concat([pd.Series(np.random.randn(i)) for i in counts],axis=1) 
>>> df.apply(np.random.permutation) 
      0  1   2   3   4 
0  NaN  NaN 1.354730 -0.297923 0.731383 
1  NaN  NaN 0.084739  NaN -1.210666 
2  NaN 1.55258 -1.016366 -0.294881 0.102921 
3  NaN 0.08485  NaN 0.956638 -1.004768 
4 0.612248  NaN  NaN 0.167499 -0.419745 
+0

Спасибо всем! – luffe

1

Вы можете использовать что-то вроде этого, я думаю:

>>> import random 
>>> df = pd.DataFrame(np.random.randn(5,6)) 
>>> for i in range(len(df.columns)): 
...  df.iloc[random.sample(range(5), i + 1), i] = None 
... 
>>> df 
      0   1   2   3   4 
0 -1.527144 -0.6289867 0.7836826 0.2627288  None 
1 0.0391009  None  None  None  None 
2 -0.1480286 0.5671133 0.4761757  None  None 
3 -1.36673  None  None  None  None 
4  None 2.146048  None  None  None 
5 -1.019026 -0.8022319 -0.5602172 -1.428174 -1.306279 
Смежные вопросы