我有一个测试数据帧,由具有以下属性的数据的缩减样本大小组成:
dataframe = pd.read_csv('Data/bookstore_0.txt', sep= ' ', header=None)
dataframe.columns = ['Timestamp', 'ID', 'X', 'Y']
dataframe.insert(4, 'X_Diff', None)
dataframe.insert(5, 'Y_Diff', None)
#dataframe[['X_Diff', 'Y_Diff']] = dataframe.groupby('ID')[['X', 'Y']].diff()
dataframe.fillna(0, inplace=True)
dataframe.describe()
Timestamp ID X Y X_Diff Y_Diff
count 16100.000000 16100.000000 16100.000000 16100.000000 16100.0 16100.0
mean 6583.729193 404.000000 -2.506816 8.656825 0.0 0.0
std 3546.059991 232.390521 12.020219 10.789998 0.0 0.0
min 0.000000 2.000000 -26.970000 -20.233000 0.0 0.0
25% 3720.000000 203.000000 -12.593000 1.958000 0.0 0.0
50% 6840.000000 404.000000 -4.645000 14.339000 0.0 0.0
75% 9360.000000 605.000000 7.870000 17.123000 0.0 0.0
max 13332.000000 806.000000 26.951000 20.521000 0.0 0.0
应用注释掉的方法dataframe[['X_Diff', 'Y_Diff']] = dataframe.groupby('ID')[['X', 'Y']].diff()
会产生以下结果:
Timestamp ID X Y X_Diff Y_Diff
count 16100.000000 16100.000000 16100.000000 16100.000000 16100.000000 16100.000000
mean 6583.729193 404.000000 -2.506816 8.656825 0.039345 -0.004718
std 3546.059991 232.390521 12.020219 10.789998 0.274080 0.183496
min 0.000000 2.000000 -26.970000 -20.233000 -0.922000 -1.133000
25% 3720.000000 203.000000 -12.593000 1.958000 0.000000 -0.007000
50% 6840.000000 404.000000 -4.645000 14.339000 0.000000 0.000000
75% 9360.000000 605.000000 7.870000 17.123000 0.077000 0.000000
max 13332.000000 806.000000 26.951000 20.521000 1.823000 0.883000
使用我的完整数据集,我得到以下结果:
txtfiles = glob.glob('Data/*.txt')
frames = [pd.read_csv(file, sep= ' ', header=None) for file in txtfiles]
ped_data = pd.concat(frames)
ped_data.columns = ['Timestamp', 'ID', 'X', 'Y']
ped_data.insert(4, 'X_Diff', None)
ped_data.insert(5, 'Y_Diff', None)
#ped_data[['X_Diff', 'Y_Diff']] = ped_data.groupby('ID')[['X', 'Y']].diff()
ped_data.fillna(0, inplace=True)
ped_data.describe()
Timestamp ID X Y X_Diff Y_Diff
count 108120.000000 108120.000000 108120.000000 108120.000000 108120.0 108120.0
mean 5949.556049 325.945986 -1.028735 10.648398 0.0 0.0
std 3713.754148 250.269185 14.773480 17.339787 0.0 0.0
min 0.000000 0.000000 -37.029000 -28.242000 0.0 0.0
25% 2676.000000 123.000000 -12.456000 -4.186000 0.0 0.0
50% 5772.000000 276.000000 -1.909000 12.858000 0.0 0.0
75% 9036.000000 479.000000 10.421000 20.983000 0.0 0.0
max 14532.000000 1141.000000 36.632000 63.559000 0.0 0.0
但是,再次应用注释掉的方法会导致以下错误:
ped_data[['X_Diff', 'Y_Diff']] = ped_data.groupby('ID')[['X', 'Y']].diff()
ValueError: Columns must be same length as key
我曾尝试在这里研究其他来源,但还没有真正找到解决方案
该方法本身计算得很好,就像简单地运行一样
ped_data.groupby('ID')[['X', 'Y']].diff()
但是,将用正确的值覆盖X、Y列,这意味着必须在
ped_data[['X_Diff', 'Y_Diff']] =
分配零件
我将感谢任何帮助
编辑:我发现了一个解决方法,以防任何有类似问题的人偶然发现:
通过在每个帧上运行dataframe操作,并在完成后将它们组合在一起,我能够避免错误
pedestrian_data = pd.DataFrame()
txtfiles = glob.glob('Data/*.txt')
for file in txtfiles:
dataframe = pd.read_csv(file, sep= ' ', header=None)
dataframe.columns = ['Timestamp', 'ID', 'X', 'Y']
dataframe.insert(4, 'X_Diff', None)
dataframe.insert(5, 'Y_Diff', None)
dataframe[['X_Diff', 'Y_Diff']] = dataframe.groupby('ID')[['X', 'Y']].diff()
dataframe.fillna(0, inplace=True)
pedestrian_data = pedestrian_data.append(dataframe)
它很可能在性能方面更慢,因为它使用了一个常规的Python for循环,而不是让panda来完成繁重的工作,但至少它可以运行
我仍然会等待,看看是否有人有一个答案,尽管这是值得张贴
请尝试改用
groupby.transform
:相关问题 更多 >
编程相关推荐