![](/img/trans.png)
[英]How to change values in a given column based on a condition and put those new values in a new column? (New information added)
[英]How do I take 1 column of values and put some of those values in a new column based on a boolean flag column?
說我有以下二維數據幀
+--------+-------------------+------------+
| Index, | Module/Line Item, | Is Module, |
+--------+-------------------+------------+
| 0, | Module 1, | True, |
|--------|-------------------|------------|
| 1, | Line Item 1, | False, |
|--------|-------------------|------------|
| 2, | Line Item 2, | False, |
|--------|-------------------|------------|
| 3, | Module 2, | True, |
|--------|-------------------|------------|
| 4, | Line Item 1, | False, |
|--------|-------------------|------------|
| 5, | Line Item 2, | False |
+--------+-------------------+------------+
我希望它變成這樣:
+----------+-------------+
| Module | Line Item |
+----------+-------------+
| Module 1 | Line Item 1 |
| |-------------|
| | Line Item 2 |
|----------|-------------|
| Module 2 | Line Item 1 |
| |-------------|
| | Line Item 2 |
+----------+-------------+
實現這一目標的最佳方法是什么? 我嘗試了pivot_table和groupby但是我無法按照我想要的方式工作。 請注意,模塊之間沒有一定數量的行項目,名稱中沒有模式。 “Is Module”列是唯一指示值是否為模塊且應該旋轉的指示符。 在模塊下方出現的所有行項目,直到下一個模塊在旋轉時應屬於該模塊。
如何轉動數據框無法解決這個問題,因為它從未解釋過如何根據另一列中給出的值將列拆分為層次結構。
使用where
用於替換False
的值Is Module
通過正向充填,通過重命名列名和最后一個過濾器boolean indexing
與loc
的過濾器也列名:
df['Module'] = df['Module/Line Item'].where(df['Is Module']).ffill()
df = df.rename(columns={'Module/Line Item':'Line Item'})
df = df.loc[~df['Is Module'], ['Module','Line Item']]
print (df)
Module Line Item
1 Module 1 Line Item 1
2 Module 1 Line Item 2
4 Module 2 Line Item 1
5 Module 2 Line Item 2
如果還需要使用空值替換Module
重復值:
df['Module'] = df['Module'].mask(df['Module'].duplicated(), '')
print (df)
Module Line Item
1 Module 1 Line Item 1
2 Line Item 2
4 Module 2 Line Item 1
5 Line Item 2
另一種解決方案,使用groupby
df.groupby(df['Is Module'].cumsum())['Module/Line Item']\
.apply(lambda g: pd.DataFrame({'Module':g.iloc[0],
'Line Item': g.iloc[1:].values}))\
.set_index('Module')
Line Item
Module
Module 1 Line Item 1
Line Item 2
Module 2 Line Item 1
Line Item 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.