Python 基于另一列追加DataFrame列
我有一个看起来像这样的数据框:Python 基于另一列追加DataFrame列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个看起来像这样的数据框: | Index | Value | |-------|--------------| | 1 | [1, 12, 123] | | 2 | [12, 123, 1] | | 3 | [123, 12, 1] | dataframe["Expected_value"] = dataframe.value.map(lambda x: len(str(x))) 我想在第三列后面加上数组元素长度的列表: | Index | Val
| Index | Value |
|-------|--------------|
| 1 | [1, 12, 123] |
| 2 | [12, 123, 1] |
| 3 | [123, 12, 1] |
dataframe["Expected_value"] = dataframe.value.map(lambda x: len(str(x)))
我想在第三列后面加上数组元素长度的列表:
| Index | Value | Expected_value |
|-------|--------------|----------------|
| 1 | [1, 12, 123] | [1, 2, 3] |
| 2 | [12, 123, 1] | [2, 3, 1] |
| 3 | [123, 12, 1] | [3, 2, 1] |
| Index | Value | Expected_value |
|-------|--------------|----------------|
| 1 | [1, 12, 123] | 6 |
| 2 | [12, 123, 1] | 6 |
| 3 | [123, 12, 1] | 6 |
我尝试过使用python lambda函数和映射,如下所示:
| Index | Value |
|-------|--------------|
| 1 | [1, 12, 123] |
| 2 | [12, 123, 1] |
| 3 | [123, 12, 1] |
dataframe["Expected_value"] = dataframe.value.map(lambda x: len(str(x)))
但我得到的不是列表,而是这些长度的总和:
| Index | Value | Expected_value |
|-------|--------------|----------------|
| 1 | [1, 12, 123] | [1, 2, 3] |
| 2 | [12, 123, 1] | [2, 3, 1] |
| 3 | [123, 12, 1] | [3, 2, 1] |
| Index | Value | Expected_value |
|-------|--------------|----------------|
| 1 | [1, 12, 123] | 6 |
| 2 | [12, 123, 1] | 6 |
| 3 | [123, 12, 1] | 6 |
您可以将
列表理解
与映射
一起使用:
dataframe["Expected_value"] = dataframe.Value.map(lambda x: [len(str(y)) for y in x])
或嵌套列表理解:
dataframe["Expected_value"] = [[len(str(y)) for y in x] for x in dataframe.Value]
[[len(str(y)) for y in x] for x in df['Value'].tolist()]
# [[1, 2, 3], [2, 3, 1], [3, 2, 1]]
df['Expected_value'] = [[len(str(y)) for y in x] for x in df['Value'].tolist()]
df
Index Value Expected_value
0 1 [1, 12, 123] [1, 2, 3]
1 2 [12, 123, 1] [2, 3, 1]
2 3 [123, 12, 1] [3, 2, 1]
对于获取整数长度,也可以使用其他方法:
import math
dataframe["Expected_value"] = [[int(math.log10(y))+1 for y in x] for x in dataframe.Value]
您可以将
列表理解
与映射
一起使用:
dataframe["Expected_value"] = dataframe.Value.map(lambda x: [len(str(y)) for y in x])
或嵌套列表理解:
dataframe["Expected_value"] = [[len(str(y)) for y in x] for x in dataframe.Value]
[[len(str(y)) for y in x] for x in df['Value'].tolist()]
# [[1, 2, 3], [2, 3, 1], [3, 2, 1]]
df['Expected_value'] = [[len(str(y)) for y in x] for x in df['Value'].tolist()]
df
Index Value Expected_value
0 1 [1, 12, 123] [1, 2, 3]
1 2 [12, 123, 1] [2, 3, 1]
2 3 [123, 12, 1] [3, 2, 1]
对于获取整数长度,也可以使用其他方法:
import math
dataframe["Expected_value"] = [[int(math.log10(y))+1 for y in x] for x in dataframe.Value]
使用列表理解:
dataframe["Expected_value"] = [[len(str(y)) for y in x] for x in dataframe.Value]
[[len(str(y)) for y in x] for x in df['Value'].tolist()]
# [[1, 2, 3], [2, 3, 1], [3, 2, 1]]
df['Expected_value'] = [[len(str(y)) for y in x] for x in df['Value'].tolist()]
df
Index Value Expected_value
0 1 [1, 12, 123] [1, 2, 3]
1 2 [12, 123, 1] [2, 3, 1]
2 3 [123, 12, 1] [3, 2, 1]
如果您需要处理丢失的数据
def foo(x):
try:
return [len(str(y)) for y in x]
except TypeError:
return np.nan
df['Expected_value'] = [foo(x) for x in df['Value'].tolist()]
df
Index Value Expected_value
0 1 [1, 12, 123] [1, 2, 3]
1 2 [12, 123, 1] [2, 3, 1]
2 3 [123, 12, 1] [3, 2, 1]
在处理对象类型数据时,它可能是性能最好的。更多阅读
另一个带有
pd.DataFrame
、applymap
和agg
的解决方案:
pd.DataFrame(df['Value'].tolist()).astype(str).applymap(len).agg(list, axis=1)
0 [1, 2, 3]
1 [2, 3, 1]
2 [3, 2, 1]
dtype: object
使用列表理解:
dataframe["Expected_value"] = [[len(str(y)) for y in x] for x in dataframe.Value]
[[len(str(y)) for y in x] for x in df['Value'].tolist()]
# [[1, 2, 3], [2, 3, 1], [3, 2, 1]]
df['Expected_value'] = [[len(str(y)) for y in x] for x in df['Value'].tolist()]
df
Index Value Expected_value
0 1 [1, 12, 123] [1, 2, 3]
1 2 [12, 123, 1] [2, 3, 1]
2 3 [123, 12, 1] [3, 2, 1]
如果您需要处理丢失的数据
def foo(x):
try:
return [len(str(y)) for y in x]
except TypeError:
return np.nan
df['Expected_value'] = [foo(x) for x in df['Value'].tolist()]
df
Index Value Expected_value
0 1 [1, 12, 123] [1, 2, 3]
1 2 [12, 123, 1] [2, 3, 1]
2 3 [123, 12, 1] [3, 2, 1]
在处理对象类型数据时,它可能是性能最好的。更多阅读
另一个带有
pd.DataFrame
、applymap
和agg
的解决方案:
pd.DataFrame(df['Value'].tolist()).astype(str).applymap(len).agg(list, axis=1)
0 [1, 2, 3]
1 [2, 3, 1]
2 [3, 2, 1]
dtype: object
是我还是
Expected value
中的6
不正确?我的脑子里乱七八糟地想我是怎么得到整数的——我没有检查这是长度值的总和,还是仅仅是值列中的列表长度。你手动插入值,我以为是准确的map
outputIt的我,或者期望值中的6
不正确?我的脑子里乱七八糟地想我是怎么得到整数的——我没有检查这是长度值的总和,还是仅仅是值列中列表的长度。你手动插入值,我以为是精确的map
输出。你能建议我如何像这样读取剪贴板吗sep='\\;+'
不工作。@residentsleep-不幸的是,我必须复制到文本文件并更改格式,这不是很好的方法…你能建议我如何像这样阅读剪贴板吗sep='\\;+'
不起作用。@residentsleep-不幸的是,我必须复制到文本文件并更改格式,这不是很好的方法…就像捕获NaN
的函数一样!谢谢@Erfan!我责怪我的mac电脑自动纠错。“groupby”过去也被改成“groupie”,在我学会如何修复它之前,它非常令人恼火。不客气。是的,我可以想象,有同样的问题,比如函数捕捉NaN
!谢谢@Erfan!我责怪我的mac电脑自动纠错。“groupby”过去也被改成“groupie”,在我学会如何修复它之前,它非常令人恼火。不客气。是的,我可以想象,我也有同样的问题