熊猫数据框-如何串联具有相同列的多个数据框

时间:2019-01-30 14:09:02

标签: python pandas dataframe

[编辑]

我想首先看到一列(“ CUS_ID”)全部为“ DAY OF WEEK”

,然后是“ CUS_ID的TIME_HOUR下一个”

仅串联即可返回cus_id的第一个星期几

然后返回所有cus_id的TIME_HOUR。...

-

如何仅使用一列连接数据帧? 有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 :(得分:0)

不确定好主意是否将2个不同的数据信息(小时和天数)结合在一起,但是是否确实需要它:

您可以通过列表中的值将concatreindex结合使用:

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