создать фрейм данных из 3 других фреймов в Python - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь создать новый df, который обобщает мою ключевую информацию, беря эту информацию из 3 (скажем) других кадров данных.

dfdate = {'x1': [2, 4, 7, 5, 6],
     'x2': [2, 2, 2, 6, 7],
     'y1': [3, 1, 4, 5, 9]}
dfdate = pd.DataFrame(df, index=range(0:4))

dfqty = {'x1': [1, 2, 6, 6, 8],
     'x2': [3, 1, 1, 7, 5],
     'y1': [2, 4, 3, 2, 8]}
dfqty = pd.DataFrame(df2, range(0:4))

dfprices = {'x1': [0, 2, 2, 4, 4],
     'x2': [2, 0, 0, 3, 4],
     'y1': [1, 3, 2, 1, 3]}
dfprices = pd.DataFrame(df3, range(0:4))

Допустим, вышеупомянутые 3 кадра данных являются моими данными. Скажем, некоторые даты, кол-во и цены на товары. Мой новый df должен быть построен из приведенных выше данных:

rng = len(dfprices.columns)*len(dfprices.index) # This is the len of new df
dfnew = pd.DataFrame(np.nan,index=range(0,rng),columns=['Letter', 'Number', 'date', 'qty', 'price])

Так вот, здесь я изо всех сил пытаюсь собрать свои вещи вместе. Я пытаюсь взять все данные в dfdate и поместить их в столбец в новом df. то же самое с dfqty и dfprice. (таким образом, матрицы 3x5 по существу переходят в вектор 1x15 и помещаются в новый df).

Кроме того, мне нужна пара столбцов в dfnew в качестве идентификаторов из имен столбцов старого df.

Я пробовал циклы, но безрезультатно, и не знаю, как преобразовать df в ряд. Но мой желаемый результат:

dfnew:
   'Lettercol','Numbercol', 'date', 'qty', 'price'
0     X            1         2       1      0
1     X            1         4       2      2
2     X            1         7       6      2
3     X            1         5       6      4
4     X            1         6       8      4      
5     X            2         2       3      2      
6     X            2         2       1      0                   
7     X            2         2       1      0                 
8     X            2         6       7      3          
9     X            2         7       5      4           
10    Y            1         3       2      1                  
11    Y            1         1       4      3           
12    Y            1         4       3      2           
13    Y            1         5       2      1          
14    Y            1         9       8      3         

где цифры 0-14 являются индексом. буква = буква из заголовка col в DFs число = число из заголовка col в DFs Следующие 3 столбца - это данные из оригинального файла

(не спрашивайте, почему исходные данные имеют такой забавный формат:)

Большое спасибо. мой последний вопрос не был хорошо принят, поэтому попытался сделать его лучше, спасибо

1 Ответ

0 голосов
/ 26 августа 2018

Использование:

#list of DataFrames
dfs = [dfdate, dfqty, dfprices]

#list comprehension with reshape
comb = [x.unstack() for x in dfs]
#join together
df = pd.concat(comb, axis=1, keys=['date', 'qty', 'price'])
#remove second level of MultiIndex and index to column
df = df.reset_index(level=1, drop=True).reset_index().rename(columns={'index':'col'})
#extract all values without first by indexing [1:] and first letter by [0]
df['Number'] = df['col'].str[1:]
df['Letter'] = df['col'].str[0]

cols = ['Letter', 'Number', 'date', 'qty', 'price']
#change order of columns
df = df.reindex(columns=cols)
print (df)
   Letter Number  date  qty  price
0       x      1     2    1      0
1       x      1     4    2      2
2       x      1     7    6      2
3       x      1     5    6      4
4       x      1     6    8      4
5       x      2     2    3      2
6       x      2     2    1      0
7       x      2     2    1      0
8       x      2     6    7      3
9       x      2     7    5      4
10      y      1     3    2      1
11      y      1     1    4      3
12      y      1     4    3      2
13      y      1     5    2      1
14      y      1     9    8      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...