大家好,我有两个问题需要帮助
如何将两列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
然后对 ABC
和 Quantity
执行此操作,并仅使用第一列:
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/