【问题标题】:How to split the dataframe into sub-dataframes according to different groups?如何根据不同的组将数据框拆分为子数据框?
【发布时间】:2020-09-21 21:43:44
【问题描述】:

我的 csv 中的数据是这样的:

staff_id    clock_time  device_id   latitude    longitude
1001    2020/9/20 7:26  d_1 24.48237852 118.1558955
1001    2020/9/20 5:30  d_1 24.59689407 118.0863806
1001    2020/9/18 4:17  d_2 24.59222786 118.0955275
1001    2020/9/16 3:33  d_2 24.59208312 118.0957197
1001    2020/9/15 8:34  d_2 24.59732974 118.0859644
1001    2020/9/14 4:43  d_2 25.68714724 119.3918519
1002    2020/9/13 1:17  d_3 24.58618235 118.1065715
1002    2020/9/11 9:20  d_3 24.63024186 118.0667598
1002    2020/9/10 7:22  d_3 24.48287497 118.1542957
1002    2020/9/7 5:38   d_4 25.07601853 118.7335211
1003    2020/9/5 5:44   d_6 24.59803941 118.0863071
1003    2020/9/4 7:37   d_6 24.48285023 118.1545752
1003    2020/9/3 2:38   d_6 24.6381382  118.0677933
1003    2020/8/31 6:43  d_7 24.49278011 118.1395677
1003    2020/8/30 11:41 d_7 24.59205252 118.0955596
1003    2020/8/29 3:35  d_7 24.51817637 118.1764342
1003    2020/8/28 5:05  d_7 24.59603175 118.0846872
1003    2020/8/27 2:55  d_8 26.39899424 117.7866387
1003    2020/8/26 7:45  d_8 26.39900029 117.7866379
1003    2020/8/26 3:09  d_8 26.40672436 117.8008659
1003    2020/8/26 0:26  d_8 26.89169118 117.1612365
1003    2020/8/25 9:38  d_8 26.89764297 117.1760012
1003    2020/5/19 8:29  d_8 24.47420087 118.1085551
1003    2020/5/18 9:06  d_8 24.473124   118.1705641
1003    2020/5/16 7:54  d_8 24.5101858  117.8954614

我想将dataframe按照staff_iddevice_id拆分成子dataframe,并将这些子dataframe放到一个list中,例如:

sub-dataframe1 是:

1001    2020/9/20 7:26  d_1 24.48237852 118.1558955
1001    2020/9/20 5:30  d_1 24.59689407 118.0863806

子数据框2是:

1001    2020/9/18 4:17  d_2 24.59222786 118.0955275
1001    2020/9/16 3:33  d_2 24.59208312 118.0957197
1001    2020/9/15 8:34  d_2 24.59732974 118.0859644
1001    2020/9/14 4:43  d_2 25.68714724 119.3918519

sub-dataframe3 是:

1002    2020/9/13 1:17  d_3 24.58618235 118.1065715
1002    2020/9/11 9:20  d_3 24.63024186 118.0667598
1002    2020/9/10 7:22  d_3 24.48287497 118.1542957

等等。

如何做到这一点?

我的代码:

import pandas as pd
df = pd.read_csv(r'for_test.csv', sep=',', encoding='utf-8')
gb = df.groupby(['staff_id','device_id'])

【问题讨论】:

  • 你的代码看起来不错,你的问题是什么?

标签: python pandas


【解决方案1】:

如果你想提取单独的 DataFrame,你只需要迭代你自己的解决方案:

import pandas as pd
df = pd.read_csv(r'for_test.csv', sep=',', encoding='utf-8')
gb = df.groupby(['staff_id','device_id'])
l = []
for i in gb.indices:
    df = pd.DataFrame(gb.get_group(i))
    l.append(df)

最后,您将根据列表“l”中的每个 staff_id/device_id 对获得单独的数据帧。 只需要补充一点,我认为有更简洁的方法可以遍历 GroupBy 对象,但现在就可以了。

【讨论】:

  • 这很有帮助。
【解决方案2】:

试试这个。

import pandas as pd
df = pd.read_csv(r'for_test.csv', sep=',', encoding='utf-8')
gb = df.groupby('device_id')
#print(gb.first())
#print the groups for example 'd_1'
print(gb.get_group('d_1') )
#to convert to list
print(gb.get_group('d_1').values.tolist())

【讨论】:

  • 如何获取所有device_id?gb.get_group('d_1') 只需获取d_1
  • 您可以在 print(gb.get_group('d_1') ) 上运行 for 循环。这将遍历列 ['device_id'] 中的所有值。请注意,您可能需要先删除重复项,然后再循环运行,否则您将得到重复的结果。
猜你喜欢
  • 2015-11-14
  • 2020-01-08
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
相关资源
最近更新 更多