python-3.x - 如何删除具有相同值的行?合并具有相同前缀的列

标签 python-3.x pandas dataframe merge

大家好,我有两个问题需要帮助

enter image description here 问题2 我的 df 数据如下:

<表类=“s-表”> <标题> ABC_x 数量沉默 ABC_y 数量噪声 <正文> 一个 05 NaN NaN B 03 NaN NaN NaN NaN D 08 NaN NaN E 09 G 01 NaN NaN

如何将两列ABC_x和ABC_y(相同前缀ABC)合并到一列ABC,以及将两列特殊数量的数据合并到一列Quantity?

  • 预期 DF:

    <表类=“s-表”> <标题> ABC 数量 <正文> 一个 05 B 03 D 08 E 09 G 01

感谢您的阅读并帮助我解决问题,祝您有美好的一天<3

我尝试过,但没有成功

最佳答案

问题1

pandas 有一个函数 duplicated,它为重复项提供 true,否则为 false

In [40]: df.duplicated(["Column A"])
Out[40]: 
0    False
1     True
dtype: bool

您可以使用它进行 bool 索引

In [43]: df.loc[df.duplicated(["Column A"]), "Column A"] = np.nan

In [44]: df
Out[44]: 
     Name Column A Column B Column C     Column D    Column E  Column F
0  NameA   ValueA   ValueB   ValueC   Value_D001   Value_E01   Value_F3
1  NameA       NaN  ValueB   ValueC   Value_D002   Value_E06   Value_F4

其他列也是如此。

注意

您还可以传递多列

In [52]: df.loc[
    ...:     df.duplicated(["Column A", "Column B", "Column C"]),
    ...:     ["Column A", "Column B", "Column C"],
    ...: ] = np.nan

In [53]: df
Out[53]: 
     Name Column A Column B Column C     Column D    Column E  Column F
0  NameA   ValueA   ValueB   ValueC   Value_D001   Value_E01   Value_F3
1  NameA       NaN      NaN      NaN  Value_D002   Value_E06   Value_F4

但是,这只会替换所有三列同时重复的情况。

问题2

pandas 有一个函数 fill 来替换 nan 值。从您的示例中,我假设 _x_y 中有一个值。在这种情况下,您可以使用 backfill 来使用 _x(如果存在),否则使用 _y

In [76]: df[["ABC_x", "ABC_y"]].fillna(method="backfill", axis=1)
Out[76]: 
  ABC_x ABC_y
0    A    NaN
1    B    NaN
2    D     D 
3    E     E 
4    G    NaN

然后对 ABCQuantity 执行此操作,并仅使用第一列:

In [82]: pd.DataFrame({ 
    "ABC": df[["ABC_x", "ABC_y"]].fillna(method="backfill", axis=1).iloc[:, 0],
    "Quantity": df[["Quantity silent", "Quantity noirse"]].fillna(method="backfill", axis=1).iloc[:, 0].astype(int),
})
Out[82]: 
  ABC  Quantity
0  A          5
1  B          3
2  D          8
3  E          9
4  G          1

最后的 astype(int) 只是因为 nan 不是一个有效的整数,所以 pandas 在存在 nan 的情况下将数字解释为 float

关于python-3.x - 如何删除具有相同值的行?合并具有相同前缀的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74780901/

相关文章:

python - 跟踪数据框列中的最大值

r - 将长字符串转换为 data.frame

python - Python如何为同一个数据集给出不同的结果?

python - 两个多边形中的检查点(代码改进)

python - Pandas DataFrame 合并重置索引

python - 使用 pandas 从一列字典创建一个热编码

r - 如何拆分数据框列并相应地复制行? [复制]

python - 用openai图表txt文件编码到midi转换器

python - 快速检查列表中的数字是否在给定范围内的方法

python - 使用递归分解数量