python - 如何连接 pandas.DataFrames 列

标签 python numpy pandas

我有一个名为 raw_df 的 DataFrame:

columns = ['force0', 'distance0', 'force1', 'distance1']

raw_data = [{'force0': 1.2, 'distance0': 0.0, 'force1': 0.5, 'distance1': 0.0},
            {'force0': 1.3, 'distance0': 0.1, 'force1': 0.6, 'distance1': 0.0},
            {'force0': 1.4, 'distance0': 0.2, 'force1': 0.7, 'distance1': 0.3},
            {'force0': 1.5, 'distance0': 0.5, 'force1': 0.8, 'distance1': 0.6}]

raw_df = pd.DataFrame(raw_data, columns=columns)

raw_df 看起来像这样:

   force0  distance0  force1  distance1
0     1.2        0.0     0.5        0.0
1     1.3        0.1     0.6        0.0
2     1.4        0.2     0.7        0.3
3     1.5        0.5     0.8        0.6

目前没有索引,但我希望将距离列合并为一个索引,以便各列如下:

          force0  force1
distance                
0.0          1.2     0.5
0.0          NaN.    0.6
0.1          1.3     NaN
0.2          1.4     NaN
0.3          NaN     0.7
0.5          1.5     NaN
0.6          NaN     0.8

请注意,对于 distance1 = 0.0,force1 中有 2 个条目。

索引(距离)不应排序:它们会不断增加然后减少,并且每个测试的原始顺序很重要。

Stefan 对我描述不善的问题发布了一个令人惊奇的答案,但它似乎用其他数字填充了任何缺失的力(这会产生误导,因为在这些测试中没有针对这些距离的力测量)。我使用 np.nan 来查找缺失值,因为我认为这就是 pandas 的作用。

我认为 mergejoin 可能可以满足我的需要,但无法理解 the docs .

也许 pandas.DataFrame 不是为此类数据设计的,我应该使用 numpy.genfromtxt 来代替,只需即时选择我需要的列:我不'如果我动态选择列(因为在这种情况下我没有使用索引),则看不到使用 pandas.DataFrame 的任何优势。

感谢您的帮助。

最佳答案

如果我理解正确,您将从与此类似的情况开始:

columns = list(sum(list(zip(['Forces{}'.format(i) for i in range(4)], ['Distances{}'.format(i) for i in range(4)])), ()))
df = pd.DataFrame(np.random.randint(1, 11, size=(100, 8)), columns=columns)

   Forces0  Distances0  Forces1  Distances1  Forces2  Distances2  Forces3  \
0        3           5        8           3        7           4        2   
1        1           4       10           9        9           3        6   
2       10           3        1           3        3           7        8   
3        2           1        3           6       10          10       10   
4        4           2        9           1        3          10        8   

   Distances3  
0           8  
1           5  
2           3  
3           8  
4           8  

您的目标是拥有各种 Distance列形成一个index而相应的Force columns remain in place. You could像这样堆叠框架:

df.set_index([c for c in df.columns if c.startswith('Force')], inplace=True)
df = df.stack().reset_index(level=-1, drop=True).reset_index().rename(columns={0: 'Distance'})
df.set_index(['Distance'], inplace=True)

获取:

          Forces0  Forces1  Forces2  Forces3
Distance                                    
9               7        4        6        7
9               7        4        6        7
1               7        4        6        7
6               7        4        6        7
5               1        2        3        1

关于python - 如何连接 pandas.DataFrames 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567716/

相关文章:

python - Pandas - 检查数据帧列是否包含键 :value pairs from a dictionary

python - 操作/复制数据框( Pandas )并仅维护每个月的最后一天

python - 键盘快捷键 "Takes 1 positional argument but 2 were given"

python - 根据谷歌风格指南多次导入

python - 当属性为字符串(不是 int 或 float)时,如何在 Scikit learn 中应用二元分类器

python - Pandas :将列的值分配到字典值设置的限制

algorithm - NumPy:均匀分布的N维样本

python - 查找 pandas.Series 的值何时变化至少 x

python - 如何将内存 View 转换为字节?

python - 一个类轮 : creating a dictionary from list with indices as keys