[编辑]
我想首先看到一列(“ 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
请帮助。
答案 0 :(得分:0)
不确定好主意是否将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