我刚接触熊猫,似乎无法使用合并功能:
>>> left >>> right
a b c a c d
0 1 4 9 0 1 7 13
1 2 5 10 1 2 8 14
2 3 6 11 2 3 9 15
3 4 7 12
对于列a上的左连接,我想通过连接键更新公共列。注:c列中的最后一个值来自左表,因为不存在匹配项。
>>> final
a b c d
0 1 4 7 13
1 2 5 8 14
2 3 6 9 15
3 4 7 12 NAN
我应该如何使用Pandas merge函数来实现这一点?非常感谢。
另一种方法是这样使用pd.merge:
>>> import pandas as pd
>>> final = pd.merge(left=right, right=left,
how='outer',
left_index=True,
right_index=True,
on=('a', 'c')
).sort_index(axis=1)
>>> final
a b c d
0 1 4 7 13.0
1 2 5 8 14.0
2 3 6 9 15.0
3 4 7 12 NaN
为函数的“on=”参数提供两个dataframe列的交集。
这不会像Zero的解决方案那样创建必须删除的不需要的列。
NaN值可能会将同一列中的整数更改为浮点数。
编辑:这适用于熊猫版本
一种方法是将a列设置为索引并更新:
In [11]: left_a = left.set_index('a')
In [12]: right_a = right.set_index('a')
注意:更新
只执行左连接(而不是合并),所以set_index您还需要包括left_a
中没有的附加列。
In [13]: res = left_a.reindex(columns=left_a.columns.union(right_a.columns))
In [14]: res.update(right_a)
In [15]: res.reset_index(inplace=True)
In [16]: res
Out[16]:
a b c d
0 1 4 7 13
1 2 5 8 14
2 3 6 9 15
3 4 7 12 NaN
您可以使用a'
列上的how='left'
在left
和right
之间使用merge()
。
In [74]: final = left.merge(right, on='a', how='left')
In [75]: final
Out[75]:
a b c_x c_y d
0 1 4 9 7 13
1 2 5 10 8 14
2 3 6 11 9 15
3 4 7 12 NaN NaN
将NaN
值从c_y
替换为c_x
值
In [76]: final['c'] = final['c_y'].fillna(final['c_x'])
In [77]: final
Out[77]:
a b c_x c_y d c
0 1 4 9 7 13 7
1 2 5 10 8 14 8
2 3 6 11 9 15 9
3 4 7 12 NaN NaN 12
删除不需要的列,就会得到结果
In [79]: final.drop(['c_x', 'c_y'], axis=1)
Out[79]:
a b d c
0 1 4 13 7
1 2 5 14 8
2 3 6 15 9
3 4 7 NaN 12
问题内容: 我是熊猫的新手,似乎无法将此功能与merge函数配合使用: 在列a左连接时,我想通过JOINED KEYS更新公共列。请注意,c列中的最后一个值来自LEFT表,因为没有匹配项。 如何使用Pandas合并功能执行此操作?谢谢。 问题答案: 一种方法是将a列设置为索引和: 注意:仅执行左联接(不合并),因此,除了set_index之外,还需要包括中不存在的其他列。
问题内容: 我有一个数据框df,有两列,我想按一列分组并加入属于同一组的列表,例如: 处理后: 我想保留所有重复项。我有以下问题: 数据框的dtype是对象。convert_objects()不会自动将column_b转换为列表。我怎样才能做到这一点? df.groupby(…)。apply(lambda x:…)中的函数适用于什么?x的形式是什么?清单? 我主要问题的解决方案? 提前致谢。 问题
问题内容: 我正在做一些地理编码工作,我曾用它来屏幕刮取位置地址所需的xy坐标,我将xls文件导入了panda数据框,并希望使用显式循环来更新没有xy坐标的行,例如下面: 我已经阅读了为什么在遍历熊猫DataFrame之后该功能不能“使用”?并且完全意识到,iterrow仅提供给我们一个视图,而不是一个供编辑的副本,但是如果我真的要逐行更新值怎么办?是否可行? 问题答案: 您从中获得的行是不再连接
问题内容: 我每周有一些设备的日志数据。对于某些设备,它从星期一开始,对于某些设备,它在星期三开始,等等。有时此数据中有〜月的间隔,但是我希望DataFrame索引仍然包含每周具有NaN值的行。 我正在尝试在Python中使用,但是我无法获得期望的结果。 例: 是)我有的: 我期望/想要的(请注意带有NaN的2个新行): 我得到的是: 因此,我获得了每个星期日的所有值和日期。但是我不需要每个星期天
我的数据记录如下所示 我想在forloop中向我的数据表添加新行(不是循环现有的数据表) 但这种方法行不通。如何向现有数据目录添加新行?
问题内容: 如果“文件名”不存在,我想使用pd.write_csv写入“文件名”(带有标题),否则,如果存在“文件名”,则附加到文件名中。如果我只使用命令: 写入或追加成功,但似乎每次进行追加时都会写入标头。 如果文件不存在,如何只添加标题,如果文件存在,如何不添加标题而追加标题? 问题答案: 不确定熊猫是否有办法,但是检查文件是否存在将是一种简单的方法: