Pandas dataframe - Как объединить несколько фреймов данных, имеющих один и тот же столбец - PullRequest
0 голосов
/ 30 января 2019

[редактировать]

Мне бы хотелось, чтобы в первом столбце ('CUS_ID') все 'DAY OF WEEK' сначала

, а затем TIME_HOUR CUS_ID затем

просто конкатенация возвращает сначала все дни недели cus_id

, а затем возвращает TIME_HOUR всех cus_id далее ....

-

Как объединить кадры данных, используя только один столбец?Есть 2 кадра данных, и я просто хочу объединить их в 1 столбец, у которого размер данных каждого столбца имеет значение

У меня есть такой кадр данных:

print(raw_data.head(10))
   CUS_ID     TIME_ID  TIME_HOUR  DAY
0    1176  2012083016      16h  THU
1    1176  2013030418      18h  MON
2    1192  2012091609      09h  SUN
3    1192  2012101310      10h  SAT
4     120  2012121410      10h  FRI
5     120  2012121915      15h  WED
6     120  2012121915      15h  WED
7    1269  2012070914      14h  MON
8    1269  2012071309      09h  FRI
9    1269  2013031414      14h  THU

Я сделал новыйфрейм данных с использованием 'groupby' вот так:

df_day = raw_data.groupby(['CUS_ID','DAY']).size()
df_time = raw_data.groupby('CUS_ID').TIME_HOUR.value_counts()
df_concat = pd.concat([df_day, df_time]  ,axis=1, join='outer')
print(df_concat.head(30))


          DAY  TIME_HOUR
2 01h     NaN        6.0
  02h     NaN        3.0
  03h     NaN        2.0
  04h     NaN        1.0
  05h     NaN       15.0
  06h     NaN        4.0
  07h     NaN        7.0
  08h     NaN       22.0
  09h     NaN      214.0
  10h     NaN      515.0
  ...
  FRI   925.0        NaN
  MON   956.0        NaN
  SAT    61.0        NaN
  THU  1267.0        NaN
  TUE  1334.0        NaN
  WED   869.0        NaN
3 07h     NaN       50.0

То, что мне нравится получать, выглядит так:

2 01h     6.0
  02h     3.0
  03h     2.0
  04h     1.0
  05h     15.0
  ...
  FRI     925.0        
  MON     956.0        
  SAT     61.0        
  THU     1267.0        
  TUE     1334.0        
  WED     869.0   

Пожалуйста, помогите ..

1 Ответ

0 голосов
/ 30 января 2019

Не уверен, если хорошая идея объединить 2 немного другой информации (часы и дни), но если это действительно нужно:

Вы можете использовать concat с reindex по значениям из списка:

df_day = raw_data.groupby(['CUS_ID','DAY']).size()
df_time = raw_data.groupby('CUS_ID').TIME_HOUR.value_counts()


L1 = raw_data['TIME_HOUR'].sort_values().unique().tolist()
L2 = ['SUN','MON','TUE',  'WED', 'THU','FRI','SAT']
cats = L2 + L1
print (cats)
['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', '09h', '10h', '14h', '15h', '16h', '18h']

df_concat = pd.concat([df_day, df_time]).sort_index().reindex(cats, level=1)
print(df_concat.head(30))
CUS_ID  DAY
120     WED    2
        FRI    1
        10h    1
        15h    2
1176    MON    1
        THU    1
        16h    1
        18h    1
1192    SUN    1
        SAT    1
        09h    1
        10h    1
1269    MON    1
        THU    1
        FRI    1
        09h    1
        14h    2
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...